安装新版本的子项依赖项,而不更改节点中的父项依赖项

时间:2018-07-09 14:23:56

标签: node.js npm

我有一个依赖于my-appmy-other-lib的节点项目my-test-libmy-other-lib也依赖于my-test-lib

node_modules中的结构如下:

my-app
├── my-other-lib@1.0.0
└── my-test-lib@1.0.0 (dev dependency)
    └── my-other-lib@1.0.0

my-app使用my-other-lib在生产应用程序上做一些事情,my-test-lib是帮助测试的一种框架。 my-test-lib也使用my-other-lib

我正在my-app中编写测试,我想向my-other-lib添加一些功能以帮助我进行该测试。我不需要更改my-test-lib中的任何代码即可开始工作,但是我不知道如何在不更改my-test-lib中的依赖项版本并发布新版本的情况下更新此依赖项它的。感觉我不需要这样做。

如果我释放my-other-lib@1.1.0,然后在我的应用程序运行npm install my-other-lib@1.1.0中,我将得到以下node_modules结构:

my-app
├── my-other-lib@1.1.0
└── my-test-lib@1.0.0 (dev dependency)
    └── my-other-lib@1.0.0

让我感到奇怪的是,my-test-lib将依赖项指定为my-other-lib: "^1.0.0",这意味着使用1.1.0可以很好地解决问题,但是仍然将两个软件包都安装在node_modules中。

除了提高my-test-lib中的版本并释放my-other-lib@1.1.0之外,还有没有办法让my-test-lib使用my-test-lib@1.1.0?如果不是,那么在^中列出的版本中指定package.json有什么意义?

1 个答案:

答案 0 :(得分:0)

my-test-lib也是一个npm存储库,与my-app相同,因此您的实际结构如下。

my-app
├── my-other-lib@1.1.0
└── my-test-lib@1.0.0 (dev dependency)
    └── my-other-lib@1.0.0
my-test-lib
└── my-other-lib@1.0.0

如果要升级软件包,则需要控制my-test-lib。 假设您的文件夹结构如下:

workspace
├── my-app
└── my-test-lib

您应该遵循的过程如下(从工作区开始):

// go to your lib
cd my-test-lib
// upgrade my-other-lib
npm upgrade my-other-lib@^1.0.0
//increase your package.json version
// publish your new version
npm publish
// go back to your app
cd ../my-app
// upgrade my-test-lib
npm upgrade my-test-lib@^1.0.0 

有了这个,您应该具有以下结构:

my-app
├── my-other-lib@1.0.0
└── my-test-lib@x.x.x (dev dependency) (the new version you published)
    └── my-other-lib@1.1.0

干杯。

相关问题