У меня есть popup.js, который использует materialize.min.css, а также bookmarkManager.js, который использует materialize.min.css (а также .js).
При моей текущей настройке в выходной папке создаются 2 комплекта, каждый со своей СОБСТВЕННОЙ копией materialize.min.css (это один и тот же файл, это ~ 200 дополнительных килобайт).
Можно ли повторно использовать CSS-файлы вместо того, чтобы каждый пакет создавал свою собственную копию?В этом случае я хочу иметь ОДИН файл materialize.min.css с несколькими файлами HTML, указывающими на него, чтобы сохранить размер.
Это мой текущий файл webpack.config:
var path = require('path');
var CleanWebpackPlugin = require('clean-webpack-plugin');
var CopyWebpackPlugin = require('copy-webpack-plugin');
var HtmlWebpackPlugin = require('html-webpack-plugin');
var Buffer = require('buffer/').Buffer;
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
var fileExtensions = [
'jpg',
'jpeg',
'png',
'gif',
'eot',
'otf',
'svg',
'ttf',
'woff',
'woff2'
];
var options = {
entry: {
popup: path.join(__dirname, 'src', 'js', 'popup.js'),
options: path.join(__dirname, 'src', 'js', 'options.js'),
background: path.join(__dirname, 'src', 'js', 'background.js'),
bookmarkManager: path.join(__dirname, 'src', 'js', 'bookmarkManager.js')
},
output: {
path: path.join(__dirname, 'build'),
filename: '[name].bundle.js'
},
module: {
rules: [
{
test: /\.m?js$/,
exclude: /(node_modules|bower_components)/,
use: {
loader: 'babel-loader',
options: {
presets: ['@babel/preset-env']
}
}
},
{
test: /\.css$/,
use: [
{
loader: MiniCssExtractPlugin.loader
},
'css-loader'
]
},
{
test: new RegExp('.(' + fileExtensions.join('|') + ')$'),
loader: 'file-loader?name=[name].[ext]',
exclude: /node_modules/
},
{
test: /\.html$/,
use: [
{
loader: 'html-loader',
options: { minimize: true }
}
],
exclude: /node_modules/
}
]
},
plugins: [
// clean the build folder
new CleanWebpackPlugin(['build']),
new CopyWebpackPlugin([
{
from: 'src/manifest.json',
transform: function(content, path) {
// generates the manifest file using the package.json informations
return Buffer.from(
JSON.stringify({
description: process.env.npm_package_description,
version: process.env.npm_package_version,
...JSON.parse(content.toString())
})
);
}
}
]),
new HtmlWebpackPlugin({
template: path.join(__dirname, 'src', 'popup.html'),
filename: 'popup.html',
chunks: ['popup']
}),
new HtmlWebpackPlugin({
template: path.join(__dirname, 'src', 'options.html'),
filename: 'options.html',
chunks: ['options']
}),
new HtmlWebpackPlugin({
template: path.join(__dirname, 'src', 'background.html'),
filename: 'background.html',
chunks: ['background']
}),
new HtmlWebpackPlugin({
template: path.join(__dirname, 'src', 'bookmarkManager.html'),
filename: 'bookmarkManager.html',
chunks: ['bookmarkManager']
}),
new MiniCssExtractPlugin({
// Options similar to the same options in webpackOptions.output
// both options are optional
filename: '[name].css',
chunkFilename: '[id].css'
})
]
};
module.exports = options;
Бонусный вопрос : я видел в документации, что если я хочу минимизировать с помощью minicssextractplugin, я должен также использовать js minifier, и в этом примере это uglify js, это нарушает babel?Можно ли использовать его вместе с babel или я должен использовать что-то еще?