Webpack中的规则与加载程序-有什么区别?


76

在一些Webpack示例中,您会看到对“规则”数组的引用:

module.exports = {
  module: {
    rules: [
      {
        test: /\.scss$/,
        use: ExtractTextPlugin.extract({
          fallback: 'style-loader',
          //resolve-url-loader may be chained before sass-loader if necessary
          use: ['css-loader', 'sass-loader']
        })
      }
    ]
  },
  plugins: [
    new ExtractTextPlugin('style.css')
    //if you want to pass in options, you can do so:
    //new ExtractTextPlugin({
    //  filename: 'style.css'
    //})
  ]
}

https://github.com/webpack-contrib/extract-text-webpack-plugin

在另一个加载器数组中:

var ExtractTextPlugin = require("extract-text-webpack-plugin");
module.exports = {
    module: {
        loaders: [
            {
                test: /\.css$/,
                loader: ExtractTextPlugin.extract({
                    loader: "css-loader"
                })
            },
            { test: /\.png$/, loader: "file-loader" }
        ]
    },
    plugins: [
        new ExtractTextPlugin({
            filename: "style.css",
            allChunks: true
        })
    ]
};

https://github.com/webpack/webpack/tree/master/examples/css-bundle

有什么不同?应该使用哪个?



Answers:


88

Webpack 1中使用了加载器,Webpack 2中使用了规则。他们说,将来将不赞成使用“ Loaders”,而推荐使用module.rules。

请参阅官方Webpack网站上的“迁移版本”。

module.loaders现在是module.rules

旧的加载程序配置已被功能更强大的规则系统所取代,该规则系统允许配置加载程序等。出于兼容性原因,旧的module.loaders语法仍然有效,并且解析了旧名称。新的命名约定更易于理解,并且是将配置升级为使用module.rules的充分理由。


有官方参考吗?
丹尼尔·拉夫


3
当我添加babel集成时,我从一个示例中使用了loaders部分,而没有注意这一方面,但是我的项目使用了规则,这些规则排在loaders部分之后。我花了几个小时调查为什么babel无法正常工作!!!因为规则只是默默地覆盖了装载程序部分:(
Daneel Yaitskov
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.