我们拥有自己的节点模块,用于保存多个内部项目的共享代码。 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”?
答案 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
。