即使从 package.json 中删除,node-gyp 也会尝试构建依赖项

Posted

技术标签:

【中文标题】即使从 package.json 中删除,node-gyp 也会尝试构建依赖项【英文标题】:node-gyp tries to build dependency even after removing it from package.json 【发布时间】:2017-06-16 07:20:42 【问题描述】:

我是 node 新手,但遇到了一个奇怪的问题。让我概述一下我的步骤:

    安装一个具有fabric 依赖项的项目,该依赖项又依赖于一个名为contextify 的旧包。该项目还使用node-gyp 来安装插件。 运行npm install,失败并显示:
contextify@0.1.15 安装 /path/to/project/node_modules/contextify 节点gyp重建 CXX(target) 发布/obj.target/contextify/src/contextify.o …… ../src/contextify.cc:150:16:错误:'v8::ObjectTemplate'中没有名为'SetAccessCheckCallbacks'的成员 otmpl->SetAccessCheckCallbacks(GlobalPropertyNamedAccessCheck, ~~~~~ ^ ...
    谷歌搜索otmpl->SetAccessCheckCallbacks(GlobalPropertyNamedAccessCheck, 提供了一些链接(node-gyp、fabric),这些链接清楚地表明这是节点版本的一个已知问题。我有节点 7.4,这需要节点 6 或更早版本。 我意识到fabric 并没有被这个项目实际使用,所以我从我的package.json 中删除了依赖项 我删除了我的node_modules 文件夹,然后再次运行npm install。同样的错误。

现在出现了奇怪的部分:npm install(它调用node-gyp rebuild)一直在尝试构建 contextify,尽管我可以证明它不再依赖于项目中的任何内容!

我尝试了什么:

删除我的节点缓存,由npm config get cache 输出(即rm -rf ~/.npm) 卸载并重新安装node-gyp 试图寻找这个包可能潜伏在一些半安装状态的地方,例如/usr/local/lib/node_modules

这些似乎都不起作用。有什么线索可以阻止npmnode-gyp 尝试安装此软件包吗?我愿意完全放弃我的 node/npm/node-gyp 设置并从头开始重新安装,但不太确定如何正确执行此操作。

【问题讨论】:

万一有人遇到这个问题,我解决了这个问题。我认为问题在于node 是通过 Homebrew 安装的。我最终的“解决方案”是从我的机器上卸载所有版本的节点。重新安装 nvm(不使用 brew)并使用 nvm 安装节点 6.9.4。全局安装 node-gyp。使用它来构建我的项目,此时它仍然构建了 contextify,但成功了,因为它是节点 6。然后我厌倦了这个问题并继续工作,最终包消失了。似乎是缓存问题。 嘿@JeremyKun 感谢您的提示。我通过恢复到节点 6.10.2 解决了这个问题。顺便说一句,您是否尝试过吹走整个 node_modules 并重新安装新的 npm? 是的,我试过了,但没有帮助。 【参考方案1】:

尝试将节点版本降级到6

npm install node@6

【讨论】:

来自评论:这看起来更像是评论,你能把它移到那里吗?

以上是关于即使从 package.json 中删除,node-gyp 也会尝试构建依赖项的主要内容,如果未能解决你的问题,请参考以下文章

如果 `redux` 不在 package.json 或 package-lock.json 或 node_modules 中,为啥从 'redux' 导入任何东西仍然有效?

在 Node.js 中,模块如何从应用程序的 package.json 中获取数据?

我可以从 package-lock.json 重新创建 node_modules 吗?

错误:找不到模块“../../package.json”

在 node package.json 中,使用额外参数从另一个脚本调用脚本,在这种情况下添加 mocha watcher

从命令行运行 `node index.js` 可以,但是当我在 package.json 中使用启动脚本时,我得到一个 EADDRINUSE /usr/bin/local/node 错误