Node.js 更新节点模块而不更新其依赖项

Node.js 更新节点模块而不更新其依赖项,node.js,git,npm,node-modules,Node.js,Git,Npm,Node Modules,我们有自己的节点模块,用于为几个内部项目保留共享代码。package.json中的条目如下所示: "dependencies": { "foo": "git+https://github.secureserver.net/MyProject/foo.git#master", } application\ config\ package.json node_modules\ test\ 实际上,我们将依赖节点模块与项目代码一起签入git。例如,git中的树如下所示: "dependenci

我们有自己的节点模块,用于为几个内部项目保留共享代码。package.json中的条目如下所示:

"dependencies": {
  "foo": "git+https://github.secureserver.net/MyProject/foo.git#master",
}
application\
config\
package.json
node_modules\
test\
实际上,我们将依赖节点模块与项目代码一起签入git。例如,git中的树如下所示:

"dependencies": {
  "foo": "git+https://github.secureserver.net/MyProject/foo.git#master",
}
application\
config\
package.json
node_modules\
test\
每当我们在依赖于foo的任何项目中执行“npm update foo”时,我们都会得到更新的foo,但是npm也会更新foo所依赖的节点模块,即使它们与foo一起签入git。这不是我们想要的。在“npm更新”中,我们希望foo及其所有节点模块能够准确地镜像主节点中的内容,因为这就是foo所测试的内容。我们可能需要foo中package.json中模块的精确版本,但当我们想要签入新版本时,更新foo的依赖项会变得更加困难。我们如何让“npm update foo”从Github中提取foo,而不让它更新foo的节点\u模块?

这看起来像是我们的工作

foo
项目目录中,运行
npm shrinkwrap
。这将生成一个
npm shrinkwrap.json
,其中包含您的依赖项及其依赖项的安装版本

当对
foo
运行
npm install
时,
npm shrinkwrap.json
中指定的版本将优先于
package.json

一个警告:
npm
根本不会在
package.json
中查找,因此如果您使用
npm安装--save
或edit
package.json
直接安装新包,您还需要重新运行
npm shrinkwrap