npm install <module>持久性错误? (node-gyp build?)</module>

时间:2014-04-14 06:34:15

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

我尝试安装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.

enter image description here

如何解决?


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

3 个答案:

答案 0 :(得分:10)

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


TL; DR

您需要在计算机上安装C ++编译器和Python2.7才能安装 contextify ,这是 jsdom 的依赖关系。否则,jsdom安装将失败。


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

  

Contextify

     

Contextify是jsdom的依赖项,用于在页面中运行<script>标记。换句话说,它允许在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 ,而后者依赖于 jsdom ,所以安装jsdom也是同样的问题。希望这有帮助!

<强> - 编辑 -

因为听起来你正在使用Ubuntu,我建议从以下命令开始:

sudo apt-get install build-essential

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

答案 1 :(得分:3)

似乎我通过仔细删除计算机上所有与节点相关的文件和文件夹找到了一种方法。

<强> 0。上下文:我之前使用

进行了几次不成功的控制台清理
sudo apt-get remove --purge nodejs npm topojson

然后以3种不同的方式重新安装nodejs。我尝试了每种方式,从清理到重新安装,介于2和2之间。 4次。

<强> 1。终端清除:让我们以最深的方式清理我的烂摊子:

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

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

<强> 2。手部清洗:此外,我使用nodejsnode_modules的手动清洗进一步推动清洗。我在我的计算机上查找了所有相关文件夹,更靠近根(ubuntu:/home/<user>/)。我小心地删除了所有以前安装的全局.../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递归删除。 /!\

答案 2 :(得分:0)

解决方案1b:我[怀疑] [1] rm -r /home/<user>/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]:没试过,但根据我的诊断有意义。