Когда я использую "использование" и "загрузчик" в Webpack 2 module.rules?

Я обновляю свой текущий проект до Webpack 2, который ранее использовал Webpack 1. Я изучил пару учебников об обновлении и вообще, я понимаю.

Проблема, с которой я все время сталкиваюсь, заключается в том, что я не уверен, когда использовать "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
    }
  }
];

Я просто остановлюсь здесь, прежде чем уйти от других проблем. Может кто-то, пожалуйста, объясните, что мне здесь не хватает? Не стесняйтесь спрашивать о любом другом коде, который вам нужен, чтобы помочь! Заранее благодарю вас.

Ответ 1

Как показывает учебник по миграции 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"
        ]
      }
    ]
  }

Ответ 2

module.rules предназначен для загрузчиков. Указание правила как loader является ярлыком для use: [{loader}].

Для плагинов в вашей конфигурации используйте свойство plugins.