【发布时间】:2020-06-29 08:09:51
【问题描述】:
我有一个库 A,依赖于库 C 版本“X”
库 A 也依赖库 B
库 B 依赖于库 C 版本“Y”
关于使用 webpack 打包库 A,会打包哪个版本的库 C? X 和 Y 都可以吗?
【问题讨论】:
标签: reactjs webpack package npm-install bundling-and-minification
我有一个库 A,依赖于库 C 版本“X”
库 A 也依赖库 B
库 B 依赖于库 C 版本“Y”
关于使用 webpack 打包库 A,会打包哪个版本的库 C? X 和 Y 都可以吗?
【问题讨论】:
标签: reactjs webpack package npm-install bundling-and-minification
决定问题答案的逻辑顺序是动态的,因此它可能取决于许多因素。但是,一般来说它是这样的:
您的包管理器(NPM、Yarn 等)将是第一个干预的对象。将遍历依赖关系树,所有模块将根据关联方式分布在不同的级别,显然还要考虑每个包允许的版本。这一步可能已经删除了重复的依赖(即使在不同的地方需要两个不同的版本。如果找到一个共同的有效版本,就会被使用)。
如果没有找到共同的有效版本,那么在树的不同层级中你将拥有同一个包的不同版本(它们将具有相同的名称,但路径不同),随后 Webpack 会将它们视为不同的模块。
然而,这些现在不同模块的共同依赖项将根据 Webpack 配置进行重复数据删除。
长话短说,请确保有许多层算法仅用于优化最终捆绑包。除非绝对必要,否则不会同时存在库 C 版本“X”和库 C 版本“Y”,并且不会重复常见的依赖关系。
【讨论】: