前言:上文咱们说到配置webpack的两种方式,命令行配置和配置文件配置。本文再补充一种方式:javascript
- package.json中配置: 在package.json中有一个scripts对象
1.dev为开发环境,能够配置打包环境为development,这时候运行npm run dev,就能够看到文件被打包了;css
2.prod为生产环境 npm run prodhtml
3.test为测试环境 npm run testjava
咳咳。。。步入正题webpack
tree shaking简介
- 啥是tree shaking?
- 翻译过来就是树抖动,树抖动都是会把叶子都下来,那么代码抖动会都下来什么呢?固然是代码啦~tree shaking会在生产环境下打包时把没有使用到的代码剔除掉,减少打包后js的体积,开发环境下不会剔除。
js tree shaking
案例说话
- 在sum文件中有两个模块aaa和isArray
- index.html文件中引入打包后文件'.dist/main.js'
- index.js文件中引入sum中aaa模块,没有引入isArray模块
- 执行npm run dev,控制台输出正确的打印结果
- 在打包后的main.js文件中搜索aaa,发现能找到
- 再在main.js中找isArray,发现居然也能找到
这也没有抖动剔除的效果呀,到这是否是以为我上文说的都是废话╮(╯▽╰)╭,耐心往下看~git
上述状况是由于咱们刚才执行的是npm run dev,是开发环境下的。接下来让咱们看一下生产环境是什么现象。github
- 执行npm run prod,打包的是压缩版本,会发现有aaa,没有isArray
因此,在生产环境下,tree shaking就发挥了抖动做用,把没有用到的代码都抖掉web
提高难度
上述案例是很是简单的,下面咱们来挑战一下有难度的知识。npm
loadsh、loadsh-es
loadsh是一个一致性、模块化、高性能的javascript实用工具库,loadsh-es是由loadsh导出的工具库。json
- 将loadsh引入页面Js中
- 因如今项目中没有loadsh-es,因此安装loadsh-es
- 将isArray传入一个arg函数,再在loadsh里寻找isArray函数,打印执行这个函数(到这是否是一脸茫然,耐心往下看~)
- 已经知道开发环境不会过滤没用的代码,这里就不演示了,咱们直接看生产环境。用npm run prod,会发现,在js没用到isArray的状况下,它仍是把Loadsh包打进去了,这就不符合咱们以前验证的理论了。
虽然案例中没有用到isArray,可是它分析的时候发现isArray里用到了Loadsh,它只能作当前代码中词法语法的分析,不能作scoped的分析,也就是说不能作js做用域的分析。
解决办法
为了还达到咱们最开始的抖动目的,有一个好用的插件推荐给大家~让代码进行深度的抖动
- webpack-deep-scope-plugin
git地址:github.com/vincentdcha…
总结
- tree shaking就是找到咱们代码中真正使用的代码,剔除没有被用到的代码。
- 优势:
- 减小页面的加载时间
- 不打包没有使用的代码
- 减少js文件大小,用户使用时减小用户等待时间
思考
本文主要讲了js的tree shaking,思考一下css tree shaking是什么意思呢?webpack学习(四)会详细说一下css tree shaking