何时在Webpack 2 module.rules中使用“ use”和“ loader”?

我正在将当前项目升级到Webpack2之前它是使用Webpack1的我研究了一些有关升级的教程,总的来说,我确实了解。

我一直遇到的问题是,我不确定在指定模块规则(加载器)时应何时使用“ use”和“ loader”。起初,我以为use取代了loader我了解这种语法:

module: {
  rules: [{
    test: /\.scss$/,
    use: [
      {
        loader: 'postcss-loader',
        options: {
          plugins: ...
        }
      },
      'sass-loader'
    ]
  }]
}

但是,当我使用ExtractTextPlugin时,似乎不喜欢它use我已经试过了:

      {
        test: /\.scss$/,
        use: [
          {
            loader: ExtractTextPlugin.extract({
              fallbackLoader: 'style-loader',
              loader: scssLoaders
            })
          }]
      },

scssLoaders存在:

var scssLoaders = [
  {
    loader: 'css-loader',
    options: {
      modules: true,
      importLoaders: '2',
      localIdentName: '[name]__[local]__[hash:base64:5]'
    }
  },
  {
    loader: 'postcss-loader'
  },
  {
    loader: 'sass-loader',
    options: {
      outputStyle: 'expanded',
      sourceMap: true,
      sourceMapContents: true
    }
  }
];

在解决其他问题之前,我只会在这里停留。有人可以帮忙解释一下我在这里缺少什么吗?随意询问您需要帮助的任何其他代码!

先感谢您。

EvaLEY2020/03/24 19:19:57

module.rules适用于装载机。将规则指定loader为只是快捷方式

use: [{loader}]

对于插件,请plugins在配置中使用该属性。

卡卡西Near2020/03/24 19:19:57

正如Webpack 2迁移教程所指出的,两者之间的区别在于,如果我们要使用一组加载程序,则必须使用use,如果它只是一个加载程序,则必须使用loader

module: {
   rules: [
      {
        test: /\.jsx$/,
        loader: "babel-loader", // Do not use "use" here
        options: {
          // ...
        }
      },
      {
        test: /\.less$/,
        loader: "style-loader!css-loader!less-loader"
        use: [
          "style-loader",
          "css-loader",
          "less-loader"
        ]
      }
    ]
  }