我有一个依赖于my-app
和my-other-lib
的节点项目my-test-lib
,my-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
有什么意义?
答案 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
干杯。