gpt4 book ai didi

node.js - 当版本与父模块相同时, Node 不安装子模块依赖项

转载 作者:搜寻专家 更新时间:2023-11-01 00:44:32 24 4
gpt4 key购买 nike

通常我可以在 Google 上发现我遇到的任何问题,但在这种情况下我完全不知道要搜索什么。

我的父模块有两个依赖项:

  • "grunt-contrib-uglify": "~0.2.7"
  • “Node 快照”:“~0.3.22”

但是当node-snapshot也依赖于~0.2.7时,它没有安装在node-snapshot >node_modules 目录。我的 Snapshot 应用程序通过 Travis 自动部署到 Heroku,因此:

"scripts": {
"test": "grunt test",
"start": "node example/server/default.js",
"postinstall": "node_modules/grunt-cli/bin/grunt build:production"
}

在我的父模块 (npm install node-snapshot) 中安装它之后也会调用它,但失败了,因为父子都依赖于 grunt-contrib-uglify ~0.2.7 :

>> Local Npm module "grunt-contrib-uglify" not found. Is it installed?
Warning: Task "uglify" not found. Use --force to continue.

如果父模块依赖于 grunt-contrib-uglify不同版本,则 node-snapshot 会成功安装 grunt- contrib-uglify 在其 node_modules 目录中,一切都是 tickety-boo。

我该如何解决这个问题?对我来说很明显,即使父模块具有相同的模块,所有子模块都需要自己安装,因为相对而言,子模块 (node-snapshot) 无法找到其依赖项之一。

最佳答案

经过昨晚的一些研究,这显然是 npm 的一个已知问题。有很多关于子模块依赖项未安装的线程,因为父模块满足了特定的依赖项。

GitHub 上的以下主题特别有用:https://github.com/npm/npm/issues/5001

目前没有解决方案,但解决方法。

在我使用 postinstall 的特殊情况下,解决方法是添加一个带有 --ignore-scripts 标志的 preinstall 以防止 scripts 钩子(Hook)被递归调用。这使 npm install 能够独立运行,从而安装所有 依赖项,而不考虑父模块。

因此,我的 package.json 现在看起来几乎完全一样,但带有 preinstall Hook :

"scripts": {
"test": "grunt test",
"start": "node example/server/default.js",
"preinstall": "npm install --ignore-scripts",
"postinstall": "bower install; grunt build:production"
}

关于node.js - 当版本与父模块相同时, Node 不安装子模块依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23270157/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com