javascript - Webpack 摇树在包之间不起作用
问题描述
晚上好!
几天来,我一直在尝试在不同的软件包之间进行摇树操作。
在继续之前,我创建了一个最小的复制品,我将在这篇文章中解释:https ://github.com/Apidcloud/tree-shaking-webpack
我还在 webpack repo 上打开了一个问题:https ://github.com/webpack/webpack/issues/8951
为简单起见,该示例仅使用 webpack。不使用通天塔。
上面的例子有两个包,都有各自的包:
core
- 导出 2 个函数,cube
以及unusedFn
consumer
cube
-从core
自己的功能导入和导出,consumerFn
核心包
请注意,square
函数不会导出到index.js
文件中。这是一种知道摇树确实core
至少在其中工作的方法,因为它不包含在最终包中(这是正确的)。
消费包
如您所见,cube
仅从core
. 然后它导出自己的函数 ( consumerFn
) 消费cube
。
问题
问题是consumer
捆绑包包含捆绑包中的所有内容core
。也就是说,它包含unusedFn
了不应该包含的时间,从而产生了更大的捆绑包。
最终,目标是在具有多个包的 monorepo 中做同样的事情。如果每个包都捆绑了其他包的所有内容,那么拥有它们是没有意义的。目标是仅捆绑每个软件包所需的内容。
使用optimizationBailout
我可以看到ModuleConcatenation插件正在发出一些警告消息。我还使用--verbose
了标志:
这是我的webpack.config.js
:
const path = require('path');
module.exports = {
mode: 'production',
entry: {
core: './src/index.js',
consumer: './consumer/index.js'
},
output: {
filename: '[name].js',
path: path.resolve(__dirname, 'dist'),
// for simplicity sake I removed the UMD specifics here.
// the problem is the same, with or without it.
},
optimization: {
usedExports: true,
sideEffects: true
},
stats: {
// Examine all modules
maxModules: Infinity,
// Display bailout reasons
optimizationBailout: true
}
};
我也有"sideEffects": false
在package.json
.
我也浏览了 webpack 的指南,但我不确定缺少什么。
相关问题:
解决方案
推荐阅读
- python-3.x - 使用 Javalang Python 库将 Java 代码制作成 AST
- go - HTTP客户端如何检测到HTTP服务器的传输连接是否断开
- python - 我可以将字符串与 AST 的某个子树匹配吗?
- python - 使用 Python 在 Selenium 中进行多处理(Cookie Clicker)
- git - Git 不会删除版本化目录中的目录和文件
- php - 如何在多个 Symfony 实例之间共享应用程序缓存(共享缓存池)?
- mongodb - 需要帮助计算表中的条目总数(Mongodb)
- javascript - 传单markercluster错误:未捕获的TypeError:this.callInitHooks不是函数
- c++ - 查找间隔之间的朋友号码
- phpmyadmin - 无法在我的开发机器上的 phpmyadmin 中自动登录