常用 Plugin
HtmlWebpackPlugin
自动引入脚本和样式表,可使用模版选项配置模版。简化了 HTML 文件的创建,以便为你的 webpack 包提供服务。这对于在文件名中包 含每次会随着编译而发生变化哈希的 webpack bundle 尤其有用。
js
var HtmlWebpackPlugin = require('html-webpack-plugin')
var path = require('path')
module.exports = {
entry: 'index.js',
output: {
path: path.resolve(__dirname, './dist'),
filename: 'index_bundle.js',
},
plugins: [
new HtmlWebpackPlugin({
title: 'xxxx',
template: 'public/index.html',
favicon: path.join(__dirname, '../public', 'favicon.ico'),
inject: true,
}),
],
}MiniCssExtractPlugin
将 CSS 提取到单独的文件中,为每个包含 CSS 的 JS 文件创建一个 CSS 文件,并且支持 CSS 和 SourceMaps 的按需加载。
js
const MiniCssExtractPlugin = require('mini-css-extract-plugin')
module.exports = {
plugins: [new MiniCssExtractPlugin()],
module: {
rules: [
{
test: /\.module\.(scss|sass)$/,
include: paths.appSrc,
use: [
'style-loader',
isEnvProduction && MiniCssExtractPlugin.loader, // 仅生产环境
{
loader: 'css-loader',
options: {
modules: true,
importLoaders: 2,
},
},
{
loader: 'postcss-loader',
options: {
postcssOptions: {
plugins: [['postcss-preset-env']],
},
},
},
{
loader: 'thread-loader',
options: {
workerParallelJobs: 2,
},
},
'sass-loader',
].filter(Boolean),
},
],
},
}CssMinimizerWebpackPlugin
压缩 CSS 文件
js
const CssMinimizerPlugin = require('css-minimizer-webpack-plugin')
module.exports = {
optimization: {
minimizer: [
new CssMinimizerPlugin({
parallel: 4,
}),
],
},
}TerserWebpackPlugin
压缩 JavaScript
js
const TerserPlugin = require('terser-webpack-plugin')
module.exports = {
optimization: {
minimizer: [
new TerserPlugin({
parallel: 4,
terserOptions: {
parse: {
ecma: 8,
},
compress: {
ecma: 5,
warnings: false,
comparisons: false,
inline: 2,
},
mangle: {
safari10: true,
},
output: {
ecma: 5,
comments: false,
ascii_only: true,
},
},
}),
],
},
}CopyWebpackPlugin
将已存在的单个文件或整个目录复制到构建目录
js
const CopyPlugin = require('copy-webpack-plugin')
module.exports = {
plugins: [
new CopyPlugin({
patterns: [
{ from: 'source', to: 'dest' },
{ from: 'other', to: 'public' },
],
}),
],
}