NPM - 安装子依赖项会增加软件包的大小吗?

NPM - Does installing a sub-dependency increase the size of your package bundle?

我有一个 React 应用程序。 (尽管就此问题而言,技术无关紧要)

依赖项之一是 material-ui 库。

material-ui 库的依赖项是 react-transition-group 库。

这是否意味着我可以 "npm install" react-transition-group 库而不增加我的 JS 包的大小?

这将取决于所使用的 react-transition-group 版本。 npm 会尽力只安装一个模块的单一版本。现代捆绑器 (Webpack/Rollup) 也会尝试在捆绑包中使用单一版本。

那什么时候用单例,什么时候用2份?

版本范围重叠:

material-ui 需要版本 ~1.1.0

您的 package.json 需要版本 ^1.0.0

由于这些范围重叠,npm 可以安装与 1.1.* 匹配的任何版本,并且它适用于两个模块,您只会得到 1 个副本。

版本范围不重叠:

material-ui 需要版本 ~1.1.0

您的 package.json 需要版本 ^2.0.0

由于这些范围需要不同的 SemVer 主要版本,npm 将安装两个副本,一个满足每个要求。捆绑器还需要引入两个版本。

很难准确判断子依赖中存在的版本,但是你可以在 运行 npm install 之后通过 运行 npm ls 查看所有版本将显示项目中安装的所有包和版本。