Hug*_*lpz 8 node.js npm jsdom node-gyp contextify
我尝试安装jsdom这样:
$ sudo npm install -g jsdom
# OR
$ sudo npm install jsdom
Run Code Online (Sandbox Code Playgroud)
在一些成功的命令之后,安装很快就会失败,第一条错误消息在[....]:
$ 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
....
Run Code Online (Sandbox Code Playgroud)
暗示?其他模块也会出现此错误:
$sudo npm install -g topojson
#bug with `contextify@0.1.7 install` error as well.
Run Code Online (Sandbox Code Playgroud)

如何解决?
编辑:我尝试sudo apt-get remove --purge nodejs npm topojson通过各种方式重新安装.即使nodejs重装是全成,误差保持,所以我想这是相当语境(node.gyp?cwd??).删除/重新安装尝试的方法:
sudo add-apt-repository ppa:chris-lea/node.js, git clone https://github.com/joyent/node.git(试用取消)jsh*_*ley 10
正如您从评论中发现的那样,这是一个非常常见的问题.事实上,jsdom的作者已经在项目的git存储库的README文件中记录了它.
你需要在你的机器上安装一个C++编译器和Python2.7来安装contextify,这是jsdom的依赖.否则,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.但它很棘手,所以从基础开始吧!
苹果电脑
- 需要安装XCode
- 需要安装"XCode的命令行工具"
- 启动XCode一次以接受许可证等,并确保正确安装
Linux的
您需要安装各种构建工具,如make,Python 2.7和编译器工具链.如果您还没有这些,那么如何安装这些将特定于您的发行版.
在满足上面提到的操作系统要求后再尝试安装jsdom,看看是否能解决问题.
顺便说一句,你在topojson中遇到了同样的问题,因为它依赖于d3,而d3又依赖于jsdom,所以安装jsdom也是同样的问题.希望这可以帮助!
- 编辑 -
既然听起来你正在使用Ubuntu,我建议从以下命令开始:
sudo apt-get install build-essential
Run Code Online (Sandbox Code Playgroud)
这将安装make和g ++以及其他一些工具.这个包和Python2.7可能是你成功安装contextify所需要的.
似乎我找到了一种方法,通过仔细删除计算机上所有与节点相关的文件和文件夹。
0. 上下文:我之前进行了几次不成功的控制台清理,其中
sudo apt-get remove --purge nodejs npm topojson
Run Code Online (Sandbox Code Playgroud)
接下来是 ~3 种不同的重新安装方法nodejs。我尝试了各种方法,从清理到重新安装,大约 2 到 4 次。
1. 终端清理:让我们首先以尽可能深的方式清理我的混乱:
npm cache clean; bower cache clean; grunt clean;
sudo apt-get remove --purge nodejs npm topojson
Run Code Online (Sandbox Code Playgroud)
然而,我只是注意到这种深度清除不会清除/删除已安装的节点模块,这些模块会保持持久性。
2. 手动吹扫:nodejs此外,我还对和进行了手动吹扫,进一步推动了吹扫node_modules。我在计算机上查找了所有/home/<user>/相关文件夹,越靠近根目录(ubuntu:)越好。我小心地删除了所有以前安装的全局.../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
Run Code Online (Sandbox Code Playgroud)
topojson之后,我通过 npm 模块(取决于它本身)的文件转换jsdom工作正常:
cd /myfolder/
topojson -o output.topo.json input.geo.json
Run Code Online (Sandbox Code Playgroud)
4.结论:我无法确定为什么,哪个文件/文件夹删除允许成功sudo apt-get install nodejs+sudo npm install -g topojson重新安装。但这种通过鼠标进行的深度清理和递归删除sudo rm -r [node related folder/file]明确地解锁了我的情况。
/!\递归删除时要非常小心。/!\rm -r
| 归档时间: |
|
| 查看次数: |
6533 次 |
| 最近记录: |