1

问题:

在 NodeJS 中,当“包 B”来自私人仓库时,我如何忽略高阶“项目 A”中的“npm install”上的依赖项“包 B”的收缩包装。

的背景:

假设我们在一个私有的 npm-package “fancy-frontend” 上开发并为此获得了一个 CI 系统,这需要在 package.json 旁边保留一个 npm-shrinkwrap.json(以获得所有依赖项的确定性快照)。

在另一个 repo 中,我们使用节点项目“fancy-system”在更高的系统上进行开发。该项目依赖于“fancy-frontend”的标记版本。所以我们使用命令安装该项目

npm i git+ssh://git@bitbucket.org/myteam/fancy-frontend.git#v1.0.2 --save

由于我们的子依赖“fancy-frontend”中现有的 npm-shrinkwrap.json,npm 似乎使用了该子收缩包装并在“fancy-frontend”模块中构建了一个完整的独立包树。以这个巨大的依赖文件树结束:

fancy-system/
   package.json
   npm-shrinkwrap.json
   node_modules/
     react-16.13.1
     fancy-frontend/
        package.json
        npm-shrinkwrap.json
        node-modules/
          react-16.13.1      // e.g. same react dep as in parent, but has it's own instance
          other-deps
     other deps

注意:我添加了 react 作为两个模块应该共享的示例依赖项,但不是。

问题:

我们有大量的重复包(尽管“fancy-system”和“fancy-frontend”引用的是同一个版本!)。我们遇到了 react 和多个实例的问题(尽管我们在“fancy-frontend”中将 react 设置为对等依赖项!)。

4

0 回答 0