【问题标题】:npm install <module> persistent error ? (node-gyp build ?)npm install <module> 持续错误? (节点 gyp 构建?)
【发布时间】:2014-05-28 00:27:55
【问题描述】:

我尝试安装 jsdom 这样的:

$ sudo npm install -g jsdom
# OR
$ sudo npm install    jsdom

在一些成功的命令之后,安装很快就失败了,第一条错误消息在[....] 之后:

$ sudo npm install jsdom 
npm http GET https://registry.npmjs.org/jsdom
npm http 304 https://registry.npmjs.org/jsdom
[....]

> contextify@0.1.7 install /home/yug/Desktop/QGis/WikiAtlas/1_shaded_relief/test/node_modules/jsdom/node_modules/contextify
> node-gyp rebuild

gyp: /home/yug/.node-gyp/0.10.25/common.gypi not found (cwd: /home/yug/Desktop/QGis/WikiAtlas/1_shaded_relief/test/node_modules/jsdom/node_modules/contextify) while reading includes of binding.gyp
gyp ERR! configure error 
gyp ERR! stack Error: `gyp` failed with exit code: 1
gyp ERR! stack     at ChildProcess.onCpExit (/usr/lib/node_modules/npm/node_modules/node-gyp/lib/configure.js:337:16)
gyp ERR! stack     at ChildProcess.EventEmitter.emit (events.js:98:17)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (child_process.js:797:12)
gyp ERR! System Linux 3.8.0-35-generic
gyp ERR! command "node" "/usr/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
gyp ERR! cwd /home/yug/Desktop/QGis/WikiAtlas/1_shaded_relief/test/node_modules/jsdom/node_modules/contextify
gyp ERR! node -v v0.10.25
gyp ERR! node-gyp -v v0.12.2
gyp ERR! not ok 
npm http 304 https://registry.npmjs.org/domhandler
npm http 304 https://registry.npmjs.org/domelementtype
npm ERR! contextify@0.1.7 install: `node-gyp rebuild`
npm ERR! Exit status 1
npm ERR! 
npm ERR! Failed at the contextify@0.1.7 install script.
npm ERR! This is most likely a problem with the contextify package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR!     node-gyp rebuild
npm ERR! You can get their info via:
npm ERR!     npm owner ls contextify
npm ERR! There is likely additional logging output above.

npm ERR! System Linux 3.8.0-35-generic
npm ERR! command "/usr/bin/node" "/usr/bin/npm" "install" "jsdom"
npm ERR! cwd /home/yug/Desktop/QGis/WikiAtlas/1_shaded_relief/test
npm ERR! node -v v0.10.25
npm ERR! npm -v 1.3.24
npm ERR! code ELIFECYCLE

npm http 304 https://registry.npmjs.org/qs
npm http 304 https://registry.npmjs.org/entities
....

提示?其他模块也会出现此错误:

 $sudo npm install -g topojson 
 #bug with `contextify@0.1.7 install` error as well.

如何解决?


编辑:我尝试了sudo apt-get remove --purge nodejs npm topojson,然后通过各种方式重新安装。 即使nodejs 重新安装成功,错误仍然存​​在,所以我猜它是上​​下文相关的(node.gypcwd ?...)。尝试删除/重新安装方式:

【问题讨论】:

  • 您好,您解决了这个问题吗?我也一样
  • 不。投票赞成这个问题可能会增加它的知名度。
  • 有趣的是,我现在似乎与npm install -g topojson 有同样的错误。
  • 你试过重新安装nodejs吗?顺便说一句,我在 Windows 上尝试过,我得到了 ENOENT。
  • 重新安装似乎不起作用,它[可能] 是别的东西,也许是node-gyp。我很难理解错误消息编辑:请参阅问题,我添加了 O 所做的重新安装试验。

标签: node.js npm jsdom node-gyp contextify


【解决方案1】:

正如您从 cmets 中发现的,这是一个非常普遍的问题。如此普遍,事实上,jsdom 的作者已经在项目的 git 存储库的 README 文件中记录了它。


TL;DR

您需要在您的机器上安装 C++ 编译器和 Python2.7 才能安装 contextify,它是 jsdom 的依赖项。否则jsdom安装会失败。


来自Github page for jsdom 上的自述文件:

上下文化

Contextify是jsdom的一个依赖,用于在页面内运行&lt;script&gt;标签。换句话说,它允许运行在 Node.js 中的 jsdom 在一个隔离的环境中运行 JavaScript 字符串,该环境伪装成浏览器环境而不是服务器。您可以看到这是一个重要的功能。

不幸的是,做这种魔术需要 C++。在 Node.js 中,使用 JavaScript 中的 C++ 意味着使用“本机模块”。本机模块在安装时编译,以便它们精确地为您的机器工作;也就是说,您不需要从 npm 下载 contextify 二进制文件,而是在从 npm 下载源代码后在本地构建一个。

不幸的是,在 npm 的安装系统中编译 C++ 可能会很棘手,尤其是对于 Windows 用户。因此,jsdom 最常见的问题之一是在没有安装适当的编译工具的情况下尝试使用它。这是编译 Contextify 并安装 jsdom 所需的:

窗口

  • 适用于 Windows 的 x86 版本 Node.js 的最新副本,而不是 x64 版本。
  • Visual C++ 2010 Express 的副本。
  • Python 2.7 的副本,安装在 C:\Python27 的默认位置。

对此有一些小的修改可以工作;例如,完整版本的 Visual Studio 通常可以工作,有时您甚至可以让 x64 版本的 Node.js 也可以工作。但这很棘手,所以从基础开始!

Mac

  • 需要安装 XCode
  • 需要安装“XCode 命令行工具”
  • 启动 XCode 一次以接受许可证等并确保已正确安装

Linux

您需要安装各种构建工具,例如 make、Python 2.7 和编译器工具链。如果您还没有它们,如何安装这些将特定于您的发行版。

在满足上述对您的操作系统的要求后,再次尝试安装 jsdom,看看是否能解决问题。

顺便说一下,topojson 也有同样的问题,因为它依赖于 d3,而 d3 又依赖于 jsdom,所以安装jsdom也是一样的问题。希望这会有所帮助!

--编辑--

因为听起来您使用的是 Ubuntu,所以我建议您从以下命令开始:

sudo apt-get install build-essential

这将安装 ma​​keg++ 以及其他一些工具。这个包和 Python2.7 可能是您成功安装 contextify 所需的全部内容。

【讨论】:

  • 看来我确实有这些依赖项。还是无解。致其他人:如果此答案解决了您的问题,请点赞并通知我们~
  • 似乎我找到了一种方法,仔细删除了我计算机上所有与节点相关的文件。在附近查看我的答案。
  • 感谢您的帮助,它促使我进行更多测试。赏金是你的:)
  • 在 Windows 下,只有在将 PYTHON 环境变量设置为 C:\Python27\python.exe 后,我才能使用 32 位版本的 node.js 和 Python 2.7.6 和 Visual C++ 2010 Express此处提到的 C:\Python27 github.com/joyent/node/issues/4047#issuecomment-8876536
【解决方案2】:

似乎我找到了一种方法,小心地删除了我计算机上所有与节点相关的文件和文件夹。

0。背景:我之前做了几次不成功的控制台清理,使用

sudo apt-get remove --purge nodejs npm topojson

随后通过~3 种不同的方式重新安装nodejs。从清理到重新安装,我尝试了 2 到 4 次。

1.终端清除: 让我们首先以最深的方式清理我的烂摊子:

npm cache clean; bower cache clean; grunt clean;
sudo apt-get remove --purge nodejs npm topojson

然而,我只是注意到这种深度清除不会清除/删除已安装的节点模块,它们会保持持久性。

2。手动清除:另外,我进一步推动了清除,对nodejsnode_modules 进行了手动清除。我在我的计算机上查找了 ALL 相关文件夹,越靠近根目录 (ubuntu: /home/&lt;user&gt;/) 越好。我小心翼翼地删除了所有以前安装的全局 .../node-modules/ 文件夹,而不删除本地模块(特定的本地安装,它们仍在工作)。

3.重新安装: 然后以下控制台允许重新安装:

sudo apt-get update
sudo apt-get install python-software-properties python g++ make
sudo add-apt-repository ppa:chris-lea/node.js
sudo apt-get update
sudo apt-get install nodejs

sudo npm install -g topojson jsdom

之后,我通过 npm 模块 topojson(取决于 jsdom)进行的文件转换工作正常:

cd /myfolder/
topojson -o output.topo.json input.geo.json   

4.结论:我无法确定原因,哪个文件/文件夹删除允许成功 sudo apt-get install nodejs + sudo npm install -g topojson 重新安装。但是这个通过鼠标和递归删除sudo rm -r [node related folder/file]进行的深度清理最终解决了我的问题。

/!\非常小心使用 rm -r 递归删除。 /!\

【讨论】:

  • 是的,工作,感谢分享答案。更改 python 的版本(从 python 2.5 到 2.7)后,我遇到了一个新问题,但安装 open-jdk 解决了。感谢您的帮助
  • 我也遇到了安装问题,对我来说,这是我使用的默认节点版本(0.11.13-beta)。我安装了 'n' (github.com/visionmedia/n) 并切换到 0.10.26 版本(在另一台机器上运行良好)并修复了所有问题。
【解决方案3】:

解决方案 1b: 我[怀疑][1] rm -r /home/&lt;user&gt;/local/lib/node_modules/ 是解锁情况的关键元素。您可以列出全局(-g)node_modules,然后专门删除相关的(topojson 和/或jsdom 和/或node-gyp),然后重新安装它(它们)。

命令: 在 ubuntu 上,尝试...

 cd /home/<user>/local/lib/node_modules/  #replace <user> by relevant user name to set your cwd
 ls -1      # give the list of global modules names
 rm -r /<module_name>    #replace <module_name> by relevant name to remove it
 sudo npm install -g <module_name>  #replace <module_name> by relevant name for global install

注意:topojson 取决于 jsdomnpm-gyp

[1]:没试过,但根据我的诊断是有意义的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多