- 分析webpack5打包文件代码,查看cmd、esm打包区别。
- lodash和lodash-es正好作为实验对象。
- 对比webpack4 与 webpack5的bundle文件差异
- 分析webpack5打包文件代码,查看cmd、esm打包区别。
- lodash和lodash-es正好作为实验对象;lodash最佳使用推荐,以及推荐理由(通过bundle代码角度)
😘Try000
cmd
: 全引入lodash,import { debounce } from 'lodash'
main.js
中依然引入的是整个lodash.js
文件
chunk-vendors
中近2w
行的lodash代码, 且没有ununsed harmony
标识,意味着不会被shaking掉
😘Try001 cmd: 全路径引入lodash/debounce,
import debounce from 'lodash/debounce'
main.js
中引入的是lodash/debounce
文件,对比Try000,仅引入了相关代码
chunk-vendors
中近600
行的lodash代码, 且没有ununsed harmony
标识,意味着不会被shaking掉
lodash的打包代码量明显减小:2w->600
🤙🏻 🤙🏻 🤙🏻
😘 Try010 esm: 全引入lodash,
import { debounce } from 'lodash-es'
main.js
中会引入的是我靠,直接引用的lodash-es/debounce.js
🐮🐮🐮跟webapck4不一样哦
chunk-vendors
中近600
行的lodash代码,已经shaking了
😘 Try011 esm: 全路径引入lodash,
import debounce from 'lodash-es/debounce'
main.js
中会引入的是lodash-es/debounce.js
chunk-vendors
中近600
行的lodash代码,已经shaking了
webpack5 & webpack4 对
commonjs
下的all in
和full path
的打包文件的引入无太大差异
import { debounce } from 'lodash'
引入整个lodash文件,没有unused***
的标识,不会shaking掉
import debounce from 'lodash/debounce'
引入debounce文件&相关文件,没有unused***
的标识,不会shaking掉
webpack5 & webpack4 对
es Module
下的all in
和full path
的打包文件的引入有点差别
import debounce from 'lodash-es/debounce'
引入debounce文件&相关文件,没有unused***
的标识,不会shaking掉
import { debounce } from 'lodash-es'
🐮🐮🐮 webpack4 引入这个lodash-es
文件,然后标记非debounce
相关为unused***
,后续可进行shading
🐮🐮🐮 webpack5 直接引入了
lodash-es/debounce
文件,
这就是巧妙之处
lodash-es
本身为文件夹,node根据文件夹下的package.json
确认入口
既可以用解构方式引入,也可以全路径引入
可以引发自己系统的import引入问题
src/test_esm/index.js
src/test_cmd/test.js