NPM-如何安装指向git URL的可传递依赖项?

Sao*_*wan 6 npm npm-install

我正在使用指向git URL的传递依赖(不在GitHub上),并且我发现NPM在安装直接父依赖时会跳过这些依赖。

例如,假设我有package A,它具有一个依赖项B

"B": "git+https://username:password@giturl.com/username/B"
Run Code Online (Sandbox Code Playgroud)

现在在一个新项目中C,我安装A

npm i git+https://username:password@giturl.com/username/A
Run Code Online (Sandbox Code Playgroud)

现在,如果我查看C的package.json和package-lock.json,我什么都找不到B!有趣的是,如果我随后B手动安装:

npm i git+https://username:password@giturl.com/username/B
Run Code Online (Sandbox Code Playgroud)

然后B显示在C的package.json和package-lock.json中,作为的传递依赖项A和的直接依赖项C

还值得一提的是,仅在使用自定义git主机时,使用github.com时不会发生此行为。

有什么办法解决这个问题,所以我不必每次都手动安装所有传递依赖项?我希望NPM表现得像github.com。

Sao*_*wan 0

我找到了一个解决方法,尽管我很困惑为什么NPM决定跳过这些依赖项。我认为这是一个错误并已提交报告

我将该--global-style标志添加到我的npm install命令中,NPM 现在将安装我的传递依赖项,但现在我无法获得重复数据删除的好处。--legacy-bundling(禁用重复数据删除)似乎也能解决问题 - 这让我相信问题出在重复数据删除上。

--global-style 参数将导致 npm 将包安装到本地 node_modules 文件夹中,其布局与全局 node_modules 文件夹使用的布局相同。只有您的直接依赖项才会显示在 node_modules 中,并且它们依赖的所有内容都将在其 node_modules 文件夹中展平。这显然会消除一些重复数据删除。