Webpack 树摇动在包之间不起作用

2024-02-18

晚上好!

几天来我一直在尝试让不同包之间的 tree shake 正常工作。

在进一步讨论之前,我创建了一个最小重现,我将在这篇文章中对此进行解释:https://github.com/Apidcloud/tree-shaking-webpack https://github.com/Apidcloud/tree-shaking-webpack

我还在 webpack repo 上提出了一个问题:https://github.com/webpack/webpack/issues/8951 https://github.com/webpack/webpack/issues/8951

为了简单起见,该示例仅使用 webpack。巴别塔没有被使用.

上面的示例有两个包,都有各自的包:

  • core- 导出 2 个函数,cube and unusedFn
  • consumer- 进口cube from core并导出自己的函数,consumerFn

核心包

注意square函数未导出到index.js文件。这是一种知道 Tree Shaking 确实在内部起作用的方法core至少,因为它不包含在最终捆绑包中(这是正确的)。

消费包

正如你所看到的,只有cube正在进口自core。然后它导出自己的函数(consumerFn)消耗cube.

Problem

问题是consumer捆绑包包括所有来自core捆。也就是说,它包括unusedFn当它不应该时,会导致更大的捆绑。

最终,目标是在具有多个包的单一存储库中执行相同的操作。如果每个包都捆绑了其他包的所有内容,那么拥有它们就没有意义。目标是仅捆绑每个包所需的内容。

Using optimizationBailout I can see that ModuleConcatenation plugin is issuing some warning messages. I also used --verbose flag: enter image description here

这是我的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 in the package.json.

我浏览了 webpack 的guide https://webpack.js.org/guides/tree-shaking/也是,但我不确定缺少什么。

相关问题:

  • webpack-3-babel-and-tree-shaking-不工作 http://stackoverflow.com/questions/47663486/webpack-3-babel-and-tree-shaking-not-working?rq=1
  • webpack-包括-final-bundle-not-tree-shaking中未使用的导出 http://stackoverflow.com/questions/48599352/webpack-including-unused-exports-in-final-bundle-not-tree-shaking

None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Webpack 树摇动在包之间不起作用 的相关文章

随机推荐

  • 在 Yii 2.0.10 中防止多次点击和 ActiveForm 提交

    I use 活动表格 http www yiiframework com doc 2 0 yii bootstrap activeform html经常使用 并且发现它很方便 因为它包含客户端验证脚本yii js and yii activ
  • 反序列化未命名数组

    我很难编写适当的注释来表示从 JSON Get 请求返回的数据 该请求返回如下数据 ProductCode 0129923083091 Description DIESEL SalesLitres 6058 7347 SalesValue
  • RxJS 主题和 Angular 2 组件

    我正在接受 Web 开发正在发生变化的事实 我需要掌握 RxJS 我目前正在使用 Angular 2 0 0 beta 15 开发一个网络应用程序 我追随最优秀的NG书2 https www ng book com 2 允许这种广告吗 哦
  • UILabel 内不同大小的顶部对齐文本

    如何在 UILabel 中将不同大小的文本顶部对齐 一个例子是价格横幅中较小尺寸的美分金额与较大尺寸的美元金额顶部对齐 iOS6中的UILabel支持NSAttributedString这允许我在同一个 UILabel 中拥有不同大小的文本
  • 宽度为 100% 的块和内联块有什么区别?

    我最近一直在尝试弄清楚什么时候适合使用inline blocks 它们似乎比仅仅一个有用得多block元素 事实上 内联块元素似乎能够做块元素能做的任何事情 但需要一些额外的样式 元素是否有任何原因display inline block
  • 使用 React 和 Javascript 保存动态创建的数据的最佳方法是什么?

    我一直在尝试让我的动态表单正常工作 但我想知道保存这样生成的数据的最佳实践是什么 我的解决方案有效 但我感觉有更好的方法 目前 我将输入字段的两个值保存在单独的数组中 但实际上它们属于在一起 所以我有一个链接值和一个内容值需要保存 稍后我需
  • 如何在 Jasmine 测试中注入控制器依赖项?

    有以下控制器定义 angular module app controllers controller HomeController scope modal Point function scope modal Point some acti
  • Delphi 7,TFileStream无法打开带有特殊字符的文件

    这行 TFileStream Create fileName fmOpenRead or fmShareDenyNone 如果文件名包含类似的内容 则会抛出异常 你最终是在呼唤CreateFileA ANSI API 并且您使用的字符没有
  • C++ 的后缀树库以及如何使用它的简单示例

    我正在搜索后缀树库 具有线性时间构造 我发现的只是 PATL 但 PATL 没有文档 我无法弄清楚任何示例 那么有没有一个 C 的后缀树库 有一个像样的文档 帕特尔主页 http code google com p patl http co
  • Laravel 4:如何为嵌套资源编写正确的嵌套控制器?

    在 Laravel 4 中 我希望创建一组 Restful 资源 如下所示 http localhost posts 1 comments http localhost posts 1 comments 1 http localhost p
  • Spark:使用地图中的键进行选择

    我需要用按键选择geo cc in a map in a DataFrame params map nullable true key string value string valueContainsNull true 但是中间有点的键值
  • 更改 Navigator.NavigationBar(标题)的默认样式

    我使用以下语法在我的反应本机应用程序中创建了一个导航栏
  • 在VIM中,有没有办法为模板尖括号定义syn区域而不与小于号冲突?

    As for and and 我真的希望能够定义syntax region for lt gt 用于 C 模板使用 如下所示 a b 但是 有没有什么方法可以创建这样的语法区域而不与以下内容发生冲突 if a lt b b
  • iOS 8 删除今日扩展

    我创建了一个用 Objective c 编码的 Today 扩展 但我决定不希望它出现在我的应用程序中 我删除了该方案 目标以及与其关联的所有文件 但它仍然保留在我的通知中心中 我删除了该应用程序 它不再位于通知中心 然后当我再次运行该应用
  • Android 单元测试 - 没有这样的属性:bootClasspath

    在刚刚宣布的单元测试支持之后 我正在尝试为 Android 执行一个简单的测试用例 http tools android com tech docs unit testing support http tools android com t
  • 多个 t2.micro 优于单个 t2.small 或 t2.medium

    我读了 EC2 的文档 实例类型 http aws amazon com ec2 instance types pricing http aws amazon com ec2 pricing FAQ http aws amazon com
  • 使用 Qt 的 QTestLib 模块进行测试

    我开始使用 Qt 的单元测试系统编写一些测试 您通常如何组织测试 它是每个模块类一个测试类 还是使用单个测试类测试整个模块 Qt 文档建议遵循前一种策略 我想为模块编写测试 该模块只提供了一个供模块用户使用的类 但是在其他类中抽象了很多逻辑
  • iPhone 5 无法正确显示网站的响应模式

    我创造了这个网站 http concordbuilders com 到目前为止我还无法找出为什么只有在某些iPhone手机上 该网站不以响应模式显示 它在大多数 iPhone 手机上都能正确显示 这是我到目前为止所做的 在Android设备
  • 为服务的 FailureAction 设置什么 REG-BINARY

    我有一个服务 我想在注册表中设置 FailureAction 的数据值 目前注册表中已设置值 使用 RegKey SetValue FailureActions Value 设置值 我想知道 1 这些字节的Value如何对应服务的恢复选项
  • Webpack 树摇动在包之间不起作用

    晚上好 几天来我一直在尝试让不同包之间的 tree shake 正常工作 在进一步讨论之前 我创建了一个最小重现 我将在这篇文章中对此进行解释 https github com Apidcloud tree shaking webpack