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

时间:2014-05-19 23:06:42

标签: node.js git npm node-modules

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

"dependencies": {
  "foo": "git+https://github.secureserver.net/MyProject/foo.git#master",
}

作为一种实践,我们将依赖节点模块与项目代码一起检入git。例如,我们在git中的树看起来像这样:

application\
config\
package.json
node_modules\
test\

每当我们在依赖于foo的任何项目中执行“npm update foo”时,我们都会获得更新的foo,但是然后npm也会更新foo所依赖的节点模块,即使它们与foo一起被检入git。这不是我们想要的。在“npm update”中,我们希望foo及其所有节点模块能够完全反映master中的内容,因为这是foo的测试内容。我们可能需要foo中package.json中的模块的确切版本,但是当我们想要检查新版本时,这会使更新foo的依赖项更成问题。如何在不更新foo的node_modules的情况下从Github获取“npm update foo”?

1 个答案:

答案 0 :(得分:1)

这看起来像是npm shrinkwrap的工作!

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

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

一个警告:npm根本不会查看package.json,因此如果您使用npm install --save或直接编辑package.json来安装新软件包,则需要还要重新运行npm shrinkwrap