Правила vs Loaders в Webpack - Какая разница?
В некоторых примерах Webpack вы видите ссылку на массив "rules":
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)
В чем разница? Что следует использовать?
Ответы
Ответ 1
Погрузчики используются в Webpack 1 и Rules в Webpack 2. Они говорят, что "Loaders" в будущем будут устаревать в пользу module.rules.
См. Миграция версий на официальном веб-сайте.
module.loaders теперь является module.rules
Старая конфигурация загрузчика была заменена более мощными правилами системы, которая позволяет конфигурировать загрузчики и многое другое. Для совместимость, старый синтаксис module.loaders все еще действителен и старые имена анализируются. Новые соглашения об именах проще понимать и являются хорошей причиной для обновления конфигурации до использования module.rules.