生产构建
Tree Shaking 按需打包文件
Tree Shaking 用于打包时去除没有使用到的代码,能够优化打包产物体积大小。
- index.js
- moment.js
import { used } from './moment';
used();
export function used() {
console.log('used function');
}
export function notUsed() {
console.log('notUsed funtion');
}
上面这个例子中我们只使用到了 moment 中的used
,但是打包后连同notUsed
一起被打包进了 main.js 文件中
Tree Shaking 可以帮我们解决这个问题。
开启方式
optimization: {
usedExports: true,
}
// production模式是会自动配置好,可写可不写
注意
- 开启后针对 副作用文件 需要单独声明避免被删除
- 只支持 ES Module 语法(import),不支持 CommonJs
- Tree Shaking 默认只在 production 模式下生效。
package.json
"sideEffects": [
"**/*.css",
"**/*.scss",
"./esnext/index.js",
"./esnext/configure.js"
],
意思是对这些文件不进行 tree shaking 处理
例如
import './common.css';
虽然我们没有使用 common.css
的一些东西,但是它起到了样式的作用的,如果不在 sideEffect 中设置的话,webpack 是不会将它打包到产物中的。
或者 "sideEffects": false