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
查看所有版本将显示项目中安装的所有包和版本。
我有一个 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
查看所有版本将显示项目中安装的所有包和版本。