tree shaking概念:
tree shaking原理:依賴於ES6 moudel特性
只能作為模塊頂層的語句出現
import的模塊名只能是字符串常量
import binding 是immutablede
`tree shaking副作用`雖然生產模式下默認開啟,但是由於經過 babel 編譯全部模塊被封裝成 IIFE(立即執行函數)
IIFE 存在副作用無法被 tree-shaking 掉
需要配置 { module: false }和 sideEffects: false
rollup 和 webpack 的 shaking 程度不同,以一個 Class 為例子
1、擦除無用的js2、擦除無用的csswebpack.prod.js文件
const PATH = {
src: path.join(__dirname, './src')
}
new PurgecssPlugin({
paths: glob.sync(`${PATH.src}/**/*`, {nodir: true})
}),
production mode默認開啟 scope Hoisting
new webpack.optimize.ModuleConcatenationPlugin()插件
構建後的代碼存在大量閉包代碼
導致打包bundle體積變大,內存開銷變大
原理:
將所有的模塊的代碼按照引用順序放在一個函數作用域裡,然後適當的重命名一些變量以防止變量名衝突
可以減少函數聲明代碼和內存開銷