usedExports

usedExports 属性用来标记一些没有用到的函数或属性。

  1. optimization: {
  2. usedExports: true,
  3. minimize: true,
  4. minimizer: [
  5. new TerserPlugin({
  6. extractComments: false,
  7. }),
  8. ]
  9. },

在开发环境下打包时可以看到,usedExports 设置 true 后,webpack 在打包结果中添加了一些魔法注释。
image.png
之后通过 minimize 和 TerserPlugin 把没有用到的函数和属性去掉。
image.png

sideEffects

在一个模块中,如果写了一些非导出的全局性代码,比如挂载原型方法或全局属性,那么这些方法或属性就是代码的副作用。一些情况下,副作用代码需要在打包时删除,然而像导入css文件之类的副作用代码需要保留,配置sideEffects 属性可以实现筛选。
在 package.json 下配置一个 “sideEffects” 属性,来实现这种方式。如果整个项目没有副作用或不需要保留副作用,设置为 fasle,如果确实有一些副作用,可以配置成一个数组。数组里的文件会保留副作用。

  1. "sideEffects": [
  2. "./src/title.js",
  3. "css/**",
  4. "*.css"
  5. ],
  1. css 文件一般不放在数组里,而是在配置文件的 rules 里配置。
  1. {
  2. test: /\.css$/,
  3. use: [
  4. 'style-loader',
  5. {
  6. loader: 'css-loader',
  7. options: {
  8. importLoaders: 1,
  9. esModule: false
  10. }
  11. },
  12. 'postcss-loader'
  13. ],
  14. sideEffects: true,
  15. },