pri*_*rma 6 webpack react-native tree-shaking
我最近看到一个关于模块深度要求的建议 -
注意:如果您不想要基于ReactART的组件及其依赖项,请执行深度要求:从'react-native-progress/Bar'中导入ProgressBar;.
根据我的知识 - 没有添加/配置Webpack 2与树摇动和自己启用uglify - RN捆绑器不会树摇动和删除未使用的模块.
鉴于此,如果建议的深度要求真的会导致未使用的依赖关系未被包含在最终捆绑中吗?
React-Native 捆绑器称为Metro,并且(截至撰写本文时)存在一个未解决的问题,该问题将在“2019 年上半年”交付。
请注意,Uglify.js(或仅作用于单个文件的任何其他内容)无法进行树摇动,因为树摇动(根据定义)是在模块之间进行的 - 相当于单个模块内的树摇动简单地称为“死”代码消除”。因此,您需要在捆绑器级别进行适当的树摇动。
回答OP中的最后一个问题:是的,如果您进行深度包含,您将排除未使用的依赖项。当您执行导入时,您将创建对特定 JavaScript 文件(以及它所依赖的文件)的依赖关系。即使您使用仅说出模块名称的简写方式进行导入(例如:) ,您也仅导入单个 JavaScript 文件import "react-native-progress":在这种情况下,您要创建的单个文件对package.json字段main(参见:browser字段)。
传统上,该主文件只是重新导出(即创建对其他模块的依赖关系并公开)其他模块。这正是index.jsin 所做的react-native-progress,这就是为什么在执行通用模块导入时最终会导入所有包的模块。当您执行所谓的“深度需求”时,您只是绕过了重新导出index.js,而是自己设置了对更深模块的依赖关系。
| 归档时间: |
|
| 查看次数: |
391 次 |
| 最近记录: |