思路
- Loader配置思路:Loader用于处理不同类型资源,将其转换为Webpack能够处理的模块。对于JavaScript,使用
babel-loader
转译ES6+语法;对于样式,根据不同样式语言(如CSS、SCSS等)选择相应loader;对于图片,选择合适的loader进行处理。
- Plugin配置思路:Plugin用于在Webpack构建流程的特定阶段执行自定义任务。如使用
HtmlWebpackPlugin
生成HTML文件,MiniCssExtractPlugin
提取CSS到单独文件,OptimizeCSSAssetsPlugin
压缩CSS,TerserPlugin
压缩JavaScript等,以优化最终打包结果。
关键配置项
- Loader配置:
module.exports = {
module: {
rules: [
{
test: /\.js$/,
exclude: /node_modules/,
use: {
loader: 'babel-loader',
options: {
presets: ['@babel/preset-env']
}
}
}
]
}
};
- **CSS**:
module.exports = {
module: {
rules: [
{
test: /\.css$/,
use: [
'MiniCssExtractPlugin.loader',
'css-loader'
]
}
]
}
};
- **SCSS**:
module.exports = {
module: {
rules: [
{
test: /\.scss$/,
use: [
'MiniCssExtractPlugin.loader',
'css-loader',
'sass-loader'
]
}
]
}
};
- **图片**:
module.exports = {
module: {
rules: [
{
test: /\.(png|jpg|gif)$/,
use: [
{
loader: 'file-loader',
options: {
name: 'images/[name].[ext]'
}
}
]
}
]
}
};
- Plugin配置:
const HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
plugins: [
new HtmlWebpackPlugin({
template: './src/index.html'
})
]
};
- **MiniCssExtractPlugin**:
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
module.exports = {
plugins: [
new MiniCssExtractPlugin({
filename:'styles.css'
})
]
};
- **OptimizeCSSAssetsPlugin**:
const OptimizeCSSAssetsPlugin = require('optimize-css-assets-plugin');
module.exports = {
optimization: {
minimizer: [
new OptimizeCSSAssetsPlugin({})
]
}
};
- **TerserPlugin**:
const TerserPlugin = require('terser-webpack-plugin');
module.exports = {
optimization: {
minimizer: [
new TerserPlugin({})
]
}
};