【发布时间】:2019-02-09 01:00:17
【问题描述】:
我有一个 lerna 项目,其中包含两个相同的包(名为 p1 和 p2)
p1 和 p2 都包含一个 3rd 方包——对于这个测试,我使用了 eosjs@beta,大约 50KB
如果我随后创建一个示例 react 项目并包含 P1,包大小按预期增长了 50KB,但令我惊讶的是,当我添加 p2 时……它又增长了 50KB。
人们会认为因为 p1 和 p2 使用相同的第 3 方库,所以对该库的一个引用将被编译到示例项目中。但事实并非如此。
此处的示例回购:https://github.com/warrick-eosny/sizetest
包的增长如下:
ls 示例/sizetest/build/static/js/ -lah
在我引用 p1 之前
117K 1.13eeb203.chunk.js
1.4K main.2170ea98.chunk.js
1.5K runtime~main.229c360f.js
引用p1后
165K 1.75baab58.chunk.js
3.7K main.36960386.chunk.js
1.5K runtime~main.229c360f.js
引用 p1 和 p2 后
212K 1.57bb37cb.chunk.js
6.4K main.491260eb.chunk.js
1.5K runtime~main.229c360f.js
示例文件夹中的项目是使用以下工具创建的:
npx create-react-app sizetest –typescript
p1 和 p2 包都是使用以下工具创建的:
哟节点打字稿-webpack
为什么示例构建不断增长.. surly webpack 足够聪明,只包含一个引用。
=============== 更新==================
这里的“删除重复代码”部分似乎应该可以解决我的问题: https://developers.google.com/web/fundamentals/performance/optimizing-javascript/code-splitting/#spitting_code_by_multiple_entry_points
但这似乎并没有。
- 我在项目文件夹中运行“纱线弹出”,然后添加了建议的配置:https://github.com/warrick-eosny/sizetest/blob/master/examples/sizetest/config/webpack.config.js#L196-L211
- 删除了丑陋的部分,以便输出可读
- 再次运行构建
这确实会生成一个公共文件,但是当您查看内容时:
grep \@module build/static/js/commons.bd2f73cb.chunk.js
可以看到代码还在重复中
* @module Serialize
* @module Numeric
* @module RPC-Error
* @module Serialize
* @module Numeric
* @module RPC-Error
* @module API
* @module JSON-RPC
* @module API
* @module JSON-RPC
【问题讨论】:
标签: javascript npm webpack lerna