在多人开发中,代码里有时候会有一些无用的代码,因此在生产环境打包构建的时候就需要去除掉,我们可以使用webpack默认的tree shaking。必须满足以下两个条件: 1,使用ES6模块化导入; 2,mode设置为production; 看以下代码,此时我们在main.js中使用了multiplication,没使用surplus,则surplus不会打包进chunk里。 新建一个treeShaking.js,使用ES6模块导出。 main.js的代码如下: webpack.prod.js的配置如下: git仓库地址:export function multiplication(a, b) {
return a % b;
}
export function surplus(a, b) {
return a * b;
}
//测试HMR
import hotTest from './assets/js/hot.js';
// 测试树摇,使用了multiplication,没使用surplus,则surplus不会打包进chunk里
import { multiplication } from './assets/js/treeShaking.js';
console.log(multiplication);
import './assets/fonts/iconfont.css';
import './assets/style/index.css';
import './assets/style/index.less';
import './assets/style/index.scss';
// babel转换
const aa = function aa() {
return 1;
};
const bb = new Promise((resolve) => {
setTimeout(() => {
resolve();
}, 2000);
});
console.log(bb);
aa();
// 测试HMR,修改hot.js文件内容只会重新打包hot.js
if (module.hot) {
module.hot.accept('./assets/js/hot.js', () => {
hotTest();
});
}
const { resolve } = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');//打包html
const MiniCssExtractPlugin = require('mini-css-extract-plugin');//分离样式
const CssMinimizerWebpackPlugin = require('css-minimizer-webpack-plugin');//压缩css
const { CleanWebpackPlugin } = require('clean-webpack-plugin');//打包前清理文件夹
const { merge } = require('webpack-merge');
const commonConfig = require('./webpack.base.js');
let prodConfig = {
entry: './src/main.js',
output: {
filename: 'bundle-[name]-[chunkhash].js',
path: resolve(__dirname, '../dist')
},
module: {
rules: [
{
test: /\.css$/,
use: [MiniCssExtractPlugin.loader, 'css-loader', 'postcss-loader']
},
{
test: /\.less$/,
use: [MiniCssExtractPlugin.loader, 'css-loader', 'postcss-loader', 'less-loader']
},
{
test: /\.scss$/,
use: [MiniCssExtractPlugin.loader, 'css-loader', 'postcss-loader', 'sass-loader']
},
{
test: /\.js$/,
exclude: /node_modules/,
loader: 'babel-loader',
options: {
cacheDirectory: true//开启babel缓存
}
},
]
},
plugins: [
//清理目录
new CleanWebpackPlugin(),
// 打包html
new HtmlWebpackPlugin({
template: './src/assets/index.html',
hash: true,
filename: 'index.html',
favicon: './src/assets/favicon.ico',
minify: {
collapseWhitespace: true,//移除空格
removeComments: true,//移除注释
}
}),
// 压缩css
new CssMinimizerWebpackPlugin(),
// 分离css
new MiniCssExtractPlugin({
filename: 'index-[name]-[contenthash].css'
})
],
mode: 'production',
target: 'es5',
}
module.exports = merge(commonConfig, prodConfig);
https://gitee.com/seimin/xiaoming2qianduan-webpack5/tree/v5.16/