使用Webpack Dev Middleware在Webpack中热重新加载CSS文件的最简单方法

Buz*_*nas 8 webpack webpack-hot-middleware webpack-dev-middleware

我有一个用TypeScript编写的项目,我可以利用Webpack Hot Reload,在我的Node.js服务器中使用两个webpack-hot-middlewarewebpack-dev-middleware库.

此外,我已经为我的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()
  ];
};
Run Code Online (Sandbox Code Playgroud)

然后,我使用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));
Run Code Online (Sandbox Code Playgroud)

Thi*_*man 1

我认为除了已有的配置之外,您不需要为 HMR 做任何特殊的事情来处理 css 文件。但 Webpack 需要将您的 css 视为应用程序的依赖项。您可以在 JavaScript 中需要(或导入)一个或多个 css 文件,这样它就成为应用程序依赖关系树的一部分。

在标准设置中,您将匹配 .css 文件以使用 css-loader 并在将其发送到输出之前对其进行转译,但由于您不希望 Webpack 接触您的 css,因此您可以使用文件加载器。Webpack 仍会选择该文件作为依赖项,但只需将其复制到输出目录而不触及其内容。

require("file!./styles.css");在您的应用程序主文件中放入类似以下内容:这将指示它在 css 文件上使用文件加载器。您需要file-loader使用 NPM 进行安装,因为它不是 Webpack 的一部分。