首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何覆盖嵌套的NPM依赖版本?

如何覆盖嵌套的NPM依赖版本?
EN

Stack Overflow用户
提问于 2013-04-04 16:30:15
回答 9查看 217.6K关注 0票数 414

我想使用grunt-contrib-jasmine NPM包。它有各种依赖关系。依赖关系图的一部分如下所示:

代码语言:javascript
运行
复制
─┬ grunt-contrib-jasmine@0.4.1
 │ ├─┬ grunt-lib-phantomjs@0.2.0
 │ │ ├─┬ phantomjs@1.8.2-2

不幸的是,在这个版本的phantomjs中有一个错误,阻止它在Mac上正确安装。这个问题在最新版本中得到了修复。

如何让使用较新版本的

一些额外的上下文:

  • grunt-contrib-jasmine显式要求phantomjs.
  • Adding的"~0.2.0"版本为grunt-lib-phantomjs,它明确要求grunt-lib-phantomjs phantomjs的版本"~1.8.1"首先对我的软件包的依赖项没有影响;两个版本都已安装,grunt-contrib-jasmine仍使用较旧的版本(请参见:
EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2013-07-02 19:05:02

您可以使用npm shrinkwrap功能来覆盖任何依赖或子依赖。

我刚刚在我们的一个grunt项目中完成了这项工作。自从2.7.3以来,我们需要一个更新版本的connect。给我们带来了麻烦。所以我创建了一个名为npm-shrinkwrap.json的文件

代码语言:javascript
运行
复制
{
  "dependencies": {
    "grunt-contrib-connect": {
      "version": "0.3.0",
      "from": "grunt-contrib-connect@0.3.0",
      "dependencies": {
        "connect": {
          "version": "2.8.1",
          "from": "connect@~2.7.3"
        }
      }
    }
  }
}

在为项目进行安装时,npm应该会自动拾取它。

(请参阅:https://nodejs.org/en/blog/npm/managing-node-js-dependencies-with-shrinkwrap/)

票数 279
EN

Stack Overflow用户

发布于 2018-01-30 23:03:23

对于2018年及以后的版本,使用npm版本5或更高版本:编辑您的package-lock.json:从"requires"部分移除该库,并将其添加到“依赖项”下。

例如,您希望deglob包使用glob包版本3.2.11,而不是其当前版本。您打开package-lock.json并看到:

代码语言:javascript
运行
复制
"deglob": {
  "version": "2.1.0",
  "resolved": "https://registry.npmjs.org/deglob/-/deglob-2.1.0.tgz",
  "integrity": "sha1-TUSr4W7zLHebSXK9FBqAMlApoUo=",
  "requires": {
    "find-root": "1.1.0",
    "glob": "7.1.2",
    "ignore": "3.3.5",
    "pkg-config": "1.1.1",
    "run-parallel": "1.1.6",
    "uniq": "1.0.1"
  }
},

"requires"中删除"glob": "7.1.2",,添加具有正确版本的"dependencies"

代码语言:javascript
运行
复制
"deglob": {
  "version": "2.1.0",
  "resolved": "https://registry.npmjs.org/deglob/-/deglob-2.1.0.tgz",
  "integrity": "sha1-TUSr4W7zLHebSXK9FBqAMlApoUo=",
  "requires": {
    "find-root": "1.1.0",
    "ignore": "3.3.5",
    "pkg-config": "1.1.1",
    "run-parallel": "1.1.6",
    "uniq": "1.0.1"
  },
  "dependencies": {
    "glob": {
      "version": "3.2.11"
    }
  }
},

现在删除你的node_modules文件夹,运行npm ci (或者对于旧版本的node/npm运行npm install ),它会将缺失的部分添加到"dependencies"部分。

票数 112
EN

Stack Overflow用户

发布于 2020-07-17 22:27:39

对我来说唯一有效的解决方案(Node12.x,npm 6.x)是使用@Rogerio Chaves开发的npm-force-resolutions

首先,通过以下方式安装它:

代码语言:javascript
运行
复制
npm install npm-force-resolutions --save-dev

如果一些损坏的可传递依赖项脚本阻止您安装任何东西,您可以添加--ignore-scripts

然后在package.json中定义应该覆盖的依赖项(您必须设置确切的版本号):

代码语言:javascript
运行
复制
"resolutions": {
  "your-dependency-name": "1.23.4"
}

"scripts"部分中添加新的预安装条目:

代码语言:javascript
运行
复制
"preinstall": "npm-force-resolutions",

现在,npm install将对所有依赖项应用更改并强制your-dependency-name处于1.23.4版本。

票数 73
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15806152

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档