Skip to content
Go back

Webpack实战

这个周末在微信读书上读完了这本居玉皓大佬写的Webpack实战,感觉webpack原理和使用讲的还是很清楚的。缺点是webpack5的内容较少 主要基于webpack4的,然后书中有些细节错误。

俗话说温故而知新,阅读这本书还是能吸收到一些有价值的内容,比如原理部分和配置部分。

下面讲下我从中获得的启发。

CJS与ES Module的动态与静态

CommonJS与ES6 Module最本质的区别在于前者对模块依赖的解决是”动态的”,而后者是”静态的”。在这里”动态”的含义是,模块依赖关系的建立发生在代码运行阶段;而”静态”则表示模块依赖关系的建立发生在代码编译阶段。

对于CommonJS来说获取的是一份导出值的副本;而在ES6 Module中则是值的动态映射,并且这个映射是只读的。

installedModules对象,每个模块只在第一次被加载的时候执行,之后其导出值就被存储到这个对象里面,当再次被加载的时候webpack会直接从这里取值,而不会重新执行该模块。

Loader工作是有顺序的

output = loaderA(loaderB(loaderC(input)))

npm包相对路径安装

相对路径安装 npm install ./xxx/xxloader 感觉比link 命令方便;因为link需要执行两次并且不直观。

sourcemap与sentry

唯一的compiler

无论是在build模式下还是在watch模式下,都仅仅会创建一个Compiler实例,这也是我们在watch模式下修改Webpack的配置时新的配置不会生效的原因。只有在我们停下当前控制台的进程再重新启动Webpack时,这些配置才会随着新的Compiler实例初始化而生效。

AST

webpack太慢的一部分原因: AST多次转换

image-20230925113913910

Parcel快的原因,只需转一次AST

image-20230925113957958

参考阅读

https://weread.qq.com/web/bookDetail/845323407299950f8450b99


Share this post on:

Previous Post
对于低代码的一些思考
Next Post
car-show