Open SyMind opened 2 years ago
原文:https://medium.com/@devongovett/parcel-v1-9-0-tree-shaking-2x-faster-watcher-and-more-87f2e1a70f79#4ed3
Parcel 编译后完全移除掉模块系统,提升所有模块到同一顶级作用域中,清除掉生产包中的无用代码。Parcel 同时支持 ES6 和 CommonJS 模块的 Tree shaking。
Parcel Tree shaking 的实现包含以下四个阶段:
import
require
下面示例展示了 Parcel 的 Tree shaking 如何移除未使用的导出,并重命名变量,以便它们不与其他模块冲突。输出包中没有模块包装函数,只有一个 IIFE 包装了整个包,模块的成本为零。
// index.js import {add} from './math'; console.log(add(2, 3)); // math.js export function add(a, b) { return a + b; } export function sub(a, b) { return a - b; } // 打包的输出 (function () { // ASSET: math.js function $3$export$add(a, b) { return a + b; } // ASSET: index.js console.log($3$export$add(2, 3)); })(); // 压缩后 (function () {function a($, r) {return $+r}console.log(a(2,3));})();
Parcel 也支持 package.json 中的 sideEffects: false 标记,这表明库作者告知 Parcel 和其它打包工具,该库在初始化阶段中不包含任何副作用,允许打包工具更加有效地判断需要包含哪些代码。
sideEffects: false
Parcel 编译后完全移除掉模块系统,提升所有模块到同一顶级作用域中,清除掉生产包中的无用代码。Parcel 同时支持 ES6 和 CommonJS 模块的 Tree shaking。
Parcel Tree shaking 的实现包含以下四个阶段:
import
一个 CommonJS 文件,或者require
一个 ES6 模块。下面示例展示了 Parcel 的 Tree shaking 如何移除未使用的导出,并重命名变量,以便它们不与其他模块冲突。输出包中没有模块包装函数,只有一个 IIFE 包装了整个包,模块的成本为零。
Parcel 也支持 package.json 中的
sideEffects: false
标记,这表明库作者告知 Parcel 和其它打包工具,该库在初始化阶段中不包含任何副作用,允许打包工具更加有效地判断需要包含哪些代码。