【问题标题】:Updating a node module without updating its dependencies更新节点模块而不更新其依赖项
【发布时间】:2014-07-08 01:14:19
【问题描述】:

我们有自己的节点模块,用于为我们的几个内部项目保留共享代码。 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 的情况下让“npm update foo”从 Github 拉取 foo?

【问题讨论】:

    标签: node.js git npm node-modules


    【解决方案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

    【讨论】:

      猜你喜欢
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多