浅谈 ES 模块和 Webpack Tree-shaking

本文探讨了Tree-shaking在前端优化中的重要性,解释了Tree-shaking与DCE的区别,并通过示例展示了Webpack如何进行Tree-shaking。文章指出,尽管Webpack 2以后支持Tree-shaking,但在某些情况下,其能力有限。为了解决这个问题,作者提供了一个作用域分析插件,用于进一步优化未使用的变量。文章强调,良好的模块设计和合理使用default与named export才是减少代码体积的关键。
摘要由CSDN通过智能技术生成

浅谈 ES 模块和 Webpack Tree-shaking

 

这是我在参加 GSoC(Google Summer of Code) 2018 里的项目:为 webpack 改进 tree-shaking。本人是 19 届应届生,目前在今日头条效率工程部(深圳研发)实习。

Tree-shaking ? 是前端比较重要的技术之一,因为减少代码包的体积意味着减少每一次网络传输的耗时,对用户体验有比较大的提升。对于一个包管理工具来说,DCE 是必不可少的 feature 之一了。

Tree-shaking 最早由打包工具 Rollup 提出,而作者也在一篇 Medium 文章解释了 Tree-shaking 和 DCE 的区别:

Rather than  excluding dead code, we’re  including live code.

Webpack 的 maintainer 之一 Tobias ?也跟我解释了他的看法,DCE 作用于模块内(webpack 的 DCE 通过 UglifyJS 完成),而 Tree-shaking 则是在打包的时候通过模块之间的信息打包必须的代码。

Webpack 与 Tree-sh

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue.js 内置了一些 tree-shaking 工具,可以帮助我们在项目构建时去除无用的代码。 1. 使用 Vue CLI Vue CLI 提供了一个名为 "modern" 模式,可以自动启用 tree-shaking,将未使用的代码从最终构建中删除。 要使用 "modern" 模式,只需在构建时添加 `--modern` 标志: ``` vue-cli-service build --modern ``` 2. 使用 ES2015 模块语法 Vue.js 组件可以使用 ES2015 模块语法导出。这种导出方式可以让 tree-shaking 更加精确地去除未使用的代码。 例如,假设我们有一个组件: ``` // MyComponent.vue <template> <div>My Component</div> </template> <script> export default { name: 'MyComponent', data() { return { message: 'Hello world' } } } </script> ``` 如果我们使用 CommonJS 导出: ``` module.exports = { name: 'MyComponent', data() { return { message: 'Hello world' } } } ``` 那么 tree-shaking 工具可能无法确定哪些代码是未使用的。 但是,如果我们使用 ES2015 模块语法导出: ``` export default { name: 'MyComponent', data() { return { message: 'Hello world' } } } ``` 那么 tree-shaking 工具可以更准确地确定哪些代码是未使用的。 3. 使用 webpack-bundle-analyzer webpack-bundle-analyzer 可以帮助我们分析构建后的包,找出哪些模块占用了最多的空间。 首先,我们需要安装 webpack-bundle-analyzer: ``` npm install --save-dev webpack-bundle-analyzer ``` 然后,在 webpack 配置中添加一个插件: ``` const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin module.exports = { // ... plugins: [ new BundleAnalyzerPlugin() ] } ``` 运行构建命令后,webpack-bundle-analyzer 将会打开一个可视化界面,帮助我们分析构建后的包。 4. 使用 terser-webpack-plugin terser-webpack-plugin 是一个用于压缩 JavaScript 代码的 webpack 插件。它可以在压缩代码的同时去除未使用的代码。 首先,我们需要安装 terser-webpack-plugin: ``` npm install --save-dev terser-webpack-plugin ``` 然后,在 webpack 配置中添加一个插件: ``` const TerserPlugin = require('terser-webpack-plugin') module.exports = { // ... optimization: { minimizer: [ new TerserPlugin({ terserOptions: { ecma: undefined, warnings: false, parse: {}, compress: {}, mangle: true, // Note `mangle.properties` is `false` by default. module: false, output: null, toplevel: false, nameCache: null, ie8: false, keep_classnames: undefined, keep_fnames: false, safari10: false, }, }), ], }, } ``` 运行构建命令后,terser-webpack-plugin 将会在压缩代码的同时去除未使用的代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值