Как связать JS и CSS файл самостоятельно с помощью Webpack?
У меня есть несколько файлов JS и SCSS. Мне нужен Webpack 4 для объединения каждой записи JS в один файл JS и каждой записи SCSS в один файл CSS. Файлы JS не импортируют файлы SCSS. Я пытаюсь сделать это со следующим webpack.config.js
:
const path = require('path');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
module.exports = {
entry: {
scriptFoo: './src/js/scriptFoo.js',
scriptBar: './src/js/scriptBar.js',
// ...
styleBaz: './src/css/styleBaz.scss',
styleBaq: './src/css/styleBaq.scss'
// ...
},
module: {
rules: [
{
test: /\.js$/,
exclude: /node_modules/,
use: 'babel-loader'
},
{
test: /\.(scss|sass)$/,
use: [
MiniCssExtractPlugin.loader,
'css-loader',
'postcss-loader',
'sass-loader'
]
}
]
},
output: {
filename: '[name].js',
path: path.resolve(__dirname, 'dist')
},
plugins: [
new MiniCssExtractPlugin({
filename: '[name].css'
})
]
};
Работает нормально, Webpack помещает скомпилированные файлы в dist
каталог. Но он также создает лишний фиктивный файл JS для каждого файла SCSS в dist
каталог:
webpack.config.js
src/
js/
scriptFoo.js
scriptBar.js
...
css/
styleBaz.scss
styleBaq.scss
...
dist/
scriptFoo.js
scriptBar.js
...
styleBaz.css
styleBaz.js // Excess
styleBaq.css
styleBaq.js // Excess
...
Как заставить Webpack не создавать лишние JS-файлы?
1 ответ
Используйте https://github.com/mrbar42/ignore-emit-webpack-plugin Webpack, чтобы не создавать лишний файл. Сначала установите его, запустив в консоли:
npm install --save-dev ignore-emit-webpack-plugin
Затем добавьте его в свою конфигурацию Webpack:
const IgnoreEmitPlugin = require('ignore-emit-webpack-plugin');
module.exports = {
// ...
plugins: [
// ...
new IgnoreEmitPlugin(['styleBaz.js', 'styleBaq.js']) // Or simply: new IgnoreEmitPlugin(/^style.*\.js$/)
]
};
Это связано с тем, что для каждого свойства в объекте ввода файл js создается в выходных местах назначения.
output: {
filename: '[name].js',
path: path.resolve(__dirname, 'dist')
},
Webpack, создающий фиктивные js, когда css является точкой входа, является известной ошибкой, которая еще не исправлена.
Также наличие нескольких входных файлов в конфигурации входа также повлияет на возможности взаимодействия с деревьями.