Самый простой способ горячей перезагрузки файла CSS в Webpack с использованием промежуточного программного обеспечения Webpack Dev.

У меня есть проект, написанный на TypeScript, в котором я могу воспользоваться преимуществами горячей перезагрузки Webpack, используя библиотеки webpack-hot-middleware и webpack-dev-middleware на моем сервере Node.js.

Кроме того, у меня уже есть все шаги сборки, настроенные для моего кода Stylus (инкрементные сборки с помощью Gulp), который создает один единственный файл CSS в моем общедоступном каталоге.

Итак, теперь я хотел бы воспользоваться преимуществами горячей перезагрузки Webpack и для CSS, так как у меня уже есть это для моего материала TypeScript, но я не хочу, чтобы он создавал мои файлы CSS, так как у меня уже есть что-то отличное для этого. В идеале я хочу, чтобы Webpack перезагружал только мой единственный файл CSS каждый раз, когда он изменяется. Каков самый простой и лучший способ добиться этого?

Мой текущий файл конфигурации выглядит так:

const webpack = require('webpack');

module.exports = {
  entry: [
    'webpack-hot-middleware/client',
    './src/client/index.tsx'
  ],
  output: {
    path: '/public/js/',
    filename: 'bundle.js',
    publicPath: '/js/'
  },
  resolve: {
    extensions: ['', '.webpack.js', '.web.js', '.ts', '.tsx', '.js']
  },
  module: {
    loaders: [
      {
        test: /\.tsx?$/,
        loader: 'ts-loader'
      }
    ]
  },
  plugins: [
    new webpack.optimize.OccurenceOrderPlugin(),
    new webpack.HotModuleReplacementPlugin()
  ];
};

Затем я использую Webpack Hot Middleware и Webpack Dev Middleware следующим образом:

const webpackConfig = require('../webpack.config');
const compiler = webpack(webpackConfig);
app.use(webpackDevMiddleware(compiler, { noInfo: true, publicPath: webpackConfig.output.publicPath }));
app.use(webpackHotMiddleware(compiler));

person Buzinas    schedule 13.05.2016    source источник


Ответы (1)


Я не думаю, что вам нужно делать что-то особенное, чтобы HMR работал с файлами css, кроме конфигурации, которая у вас уже есть. Но Webpack должен видеть ваш css как зависимость вашего приложения. Вы можете потребовать (или импортировать) один или несколько файлов css в свой javascript, и таким образом он станет частью дерева зависимостей приложения.

В стандартной настройке вы бы сопоставили файлы .css для использования загрузчика css и передали бы его перед отправкой на вывод, но, поскольку вы не хотите, чтобы Webpack касался вашего css, вы могли бы вместо этого использовать загрузчик файлов. Webpack по-прежнему подберет файл как зависимость, но просто скопирует его в выходной каталог, не касаясь его содержимого.

Поместите что-то вроде: require("file!./styles.css"); в основной файл вашего приложения. Это даст указание использовать загрузчик файлов в файле css. Вам нужно будет установить file-loader с помощью NPM, так как он не является частью Webpack.

person Thijs Koerselman    schedule 27.05.2016