【问题标题】:NPM installing nested dependency when already satisfied by parentNPM 在父级已经满足时安装嵌套依赖项
【发布时间】:2015-04-23 20:09:33
【问题描述】:

我在 NPM 在我的项目中安装两个 React 副本时遇到问题。以下是依赖项的相关部分:

我的package.json

"dependencies": {
    "react": "0.12.2",
    "tcomb-form": "0.4.5"
}

tcomb-form 的package.json

"peerDependencies": {
    "react": ">=0.12.0"
}

我不希望 tcomb-form 获得它自己的 React 副本,因为我已经有一个满足其 peerDependencies 的依赖项。

但是,在npm 2.7.4中,它确实tcomb-form/node_modules/react中安装了一个单独的版本,并且这个版本与我的版本不兼容(我使用0.12,它正在安装0.13 )

npm 1.4.28 中,这种行为是不同的,tcomb-form/node_modules/react存在,它只会使用我的版本。

有没有办法让我们在最新的npm 中都使用相同版本的 React?

【问题讨论】:

  • 我用 npm 1.4.28 和 2.8.3 做了一些测试,但都无法重现你的问题。我怀疑这里的所有细节都很重要,可能包括您完全指定的依赖项、peerDependencies 和 devDependencies。我不知道为什么每个版本都做了什么。如果您可以发布MCVE,我们或许可以准确追踪到它。

标签: node.js npm dependencies transitive-dependency tcomb


【解决方案1】:

npm dedupe 应该处理这个问题。在未来的 npm 版本中,我相信默认情况下会在 npm install 期间发生这种情况,但从 1.x 和 2.x 开始,我认为需要单独的重复数据删除。

【讨论】:

  • 啊,是的,删除了嵌套的react。不幸的是,现在我在dedupe 之后不能shrinkwrap,因为它已经移动了依赖项,并且认为它们不应该放在放置它们的地方。在dedupe 之后,您有使用shrinkwrap 的经验吗?我会尽快接受这个答案,谢谢。
  • 不,我广泛尝试了 shrinkwrap,最终放弃了它,因为它在 npm 1.x 和 2.x 中不可行。我认为他们正在为 npm 3.x 对其进行大修,然后它实际上可能会正常工作。
  • 是的,我一直把头撞在墙上,试图让收缩包装工作,这是我第二次尝试这样做。现在,看起来我只能对 npm dedupe react 进行重复数据删除反应,而且这不会触及任何其他包,所以我仍然可以在之后进行收缩包装。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 2013-07-19
  • 2019-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-24
  • 2014-09-17
  • 2016-08-29
相关资源
最近更新 更多