一、Tree Shaking
Tree Shaking只支持ES Module引入方式,不支持CommonJS的引入方式。
在mode为development下,tree shaking不会开;而在mode为production时,tree shaking是自动开着的。
tree shaking的作用是不引入所有代码,只引入需要的代码。
//webpack.config.js中配置
optimization: {
usedExports: true
}
//package.json
"sideEffects": false
//如果需要配置,例如css文件不需要tree shaking
"sideEffects": ["*.css"]
二、Development和Production模式的区分打包
区别有如下几点:
- sourcemap:在开发环境下,sourcemap是非常的全的,它能快速帮我们定位出问题代码的位置。
- 压缩代码:在生产模式下,代码时被压缩过的。
开发和生产模式分离:
创建build文件夹,在下面创建三个文件: webpack.common.js
、 webpack.dev.js
和 webpack.prod.js
分别代表公共的配置、开发环境配置和生产环境配置,目录结构如下所示。
这里合并两个js文件需要使用webpack-merge,首先用npm安装它,接着在项目中引入
//webpack.prod.js
const merge = require('webpack-merge');
const commonConfig = require('./webpack.common.js');
const prodConfig = {
mode: 'production',
devtool: 'cheap-module-source-map'
}
module.exports = merge(commonConfig, prodConfig);
//webpack.dev.js
const merge = require('webpack-merge');
const commonConfig = require('./webpack.common.js');
const devConfig = {
mode: 'development',
devtool: 'cheap-module-eval-source-map',
devServer: {
contentBase: './dist',
open: true,
port: 8080,
hot: true
},
}
module.exports = merge(commonConfig, devConfig);
三、Code Splitting(代码分割)
代码分割和webpack无关
webpack中实现代码分割,两种方式
1.同步代码:只需要在webpack.common.js中做optimization的配置;具体配置如下
optimization: {
splitChunks: {
chunks: 'all'
}
},
2.异步代码(import):无需做任何配置,会自动进行代码分割