usedExports
usedExports 属性用来标记一些没有用到的函数或属性。
optimization: {
usedExports: true,
minimize: true,
minimizer: [
new TerserPlugin({
extractComments: false,
}),
]
},
在开发环境下打包时可以看到,usedExports 设置 true 后,webpack 在打包结果中添加了一些魔法注释。
之后通过 minimize 和 TerserPlugin 把没有用到的函数和属性去掉。
sideEffects
在一个模块中,如果写了一些非导出的全局性代码,比如挂载原型方法或全局属性,那么这些方法或属性就是代码的副作用。一些情况下,副作用代码需要在打包时删除,然而像导入css文件之类的副作用代码需要保留,配置sideEffects 属性可以实现筛选。
在 package.json 下配置一个 “sideEffects” 属性,来实现这种方式。如果整个项目没有副作用或不需要保留副作用,设置为 fasle,如果确实有一些副作用,可以配置成一个数组。数组里的文件会保留副作用。
"sideEffects": [
"./src/title.js",
"css/**",
"*.css"
],
css 文件一般不放在数组里,而是在配置文件的 rules 里配置。
{
test: /\.css$/,
use: [
'style-loader',
{
loader: 'css-loader',
options: {
importLoaders: 1,
esModule: false
}
},
'postcss-loader'
],
sideEffects: true,
},