9

私はそのような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.gyp? cwd? … )なのかなと。試した方法を削除/再インストールします:

4

3 に答える 3

10

コメントからわかるように、これは非常に一般的な問題です。実際、非常に一般的であるため、jsdom の作成者は、プロジェクトの git リポジトリの README ファイルでそれを文書化しています。


TL;DR

jsdomの依存関係であるcontextifyをインストールするには、マシンに C++ コンパイラと Python2.7 をインストールする必要があります。そうしないと、jsdom のインストールが失敗します。


jsdomの Github ページの README から:

コンテキスト化

Contextify は jsdom の依存関係であり<script>、ページ内でタグを実行するために使用されます。つまり、Node.js で実行される jsdom が、サーバーではなくブラウザー環境を装う隔離された環境で JavaScript の文字列を実行できるようにします。これがいかに重要な機能であるかがわかります。

残念ながら、この種の魔法を行うには C++ が必要です。Node.js では、JavaScript から C++ を使用することは、「ネイティブ モジュール」を使用することを意味します。ネイティブ モジュールはインストール時にコンパイルされるため、お使いのマシンで正確に動作します。つまり、npm から contextify バイナリをダウンロードするのではなく、npm からソースをダウンロードした後にローカルでビルドします。

残念ながら、特に Windows ユーザーにとっては、npm のインストール システム内で C++ をコンパイルするのは難しい場合があります。したがって、jsdom に関する最も一般的な問題の 1 つは、適切なコンパイル ツールがインストールされていない状態で使用しようとすることです。Contextify をコンパイルして jsdom をインストールするために必要なものは次のとおりです。

ウィンドウズ

  • x64 バージョンではなく、Windows 用の Node.js の x86 バージョンの最新のコピー。
  • Visual C++ 2010 Express のコピー。
  • C:\Python27 のデフォルトの場所にインストールされた Python 2.7 のコピー。

これには、動作する可能性のあるわずかな変更がいくつかあります。たとえば、Visual Studio のフル バージョンは通常動作しますが、Node.js の x64 バージョンも動作する場合があります。でも難しいのでまずは基本から!

マック

  • XCodeをインストールする必要があります
  • 「XCode用コマンドラインツール」をインストールする必要があります
  • XCode を 1 回起動して、ライセンスなどに同意し、適切にインストールされていることを確認します。

Linux

make、Python 2.7、コンパイラ ツールチェーンなど、さまざまなビルド ツールをインストールする必要があります。これらをインストールする方法は、まだインストールしていない場合、ディストリビューションによって異なります。

OS の上記の要件を満たした後、jsdomを再度インストールしてみて、問題が解決するかどうかを確認してください。

ちなみに、 topojson はd3に依存しており、これはjsdomに依存しているため、同じ問題が発生しています。これは、 jsdomのインストールと同じ問題です。お役に立てれば!

- 編集 -

Ubuntu を使用しているように聞こえるので、次のコマンドから始めることをお勧めします。

sudo apt-get install build-essential

これにより、 makeg++およびその他のツールがインストールされます。contextify を正常にインストールするために必要なのは、おそらくこのパッケージと Python2.7 だけです。

于 2014-05-04T00:36:02.163 に答える
3

コンピューター上のすべてのノード関連のファイルとフォルダーを慎重に削除することで、方法を見つけたようです。

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. ハンドパージ:nodejsまた、 と の両方にハンドパージを追加して、パージをさらに押し込みましたnode_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]により、私の状況を確実に解き放ちました。

/!\再帰的な removeには十分注意してください。/!\rm -r

于 2014-05-05T13:47:20.363 に答える
0

解決策 1b:私は [疑い][1]rm -r /home/<user>/local/lib/node_modules/が状況を解き明かす重要な要素である. グローバル ( -g) node_modules をリストしてから、関連するもの ( topojsonand/or jsdomand/or 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に依存しjsdomますnpm-gyp

[1]: 試していませんが、私の診断によると理にかなっています。

于 2014-05-06T19:36:40.090 に答える