2012-03-01 2 views
9

Windowsでd3.jsをビルドしようとしています。 makefileを実行するためにcygwinをインストールしました。ただし、インストールメイクの一環として、それは、NPMインストール」を呼び出し、この呼び出しが失敗した:Windows(Cygwin)上のd3.jsのビルド - 'npm install'のパスの問題を解決する良い方法はありますか?

node.js:201 
     throw e; // process.nextTick error, or 'error' event on first tick 
      ^
Error: Cannot find module 'C:\cygdrive\c\Program Files (x86)\nodejs\node_modules\npm\bin\npm-cli.js' 
    at Function._resolveFilename (module.js:332:11) 
    at Function._load (module.js:279:25) 
    at Array.0 (module.js:479:10) 
    at EventEmitter._tickCallback (node.js:192:40) 

Makefile:230: recipe for target `install' failed 
make: *** [install] Error 1 

問題はcygwinのパスのプレフィックス(「cygdriveのの\ cが」)ファイルパスに追加されていることのようです(それ以外はパスが正しい)。

この問題の適切な回避策があるのでしょうか?私はNODE_PATH変数をエクスポートし、Makefileでそれを変更しようとしました。しかし、これはこのエラーには影響しません(そして私はMakefileをそのまま保つことを望みます)。

EDIT:Webstormのコマンドライン(cygwinなし)から「npm install」を呼び出すと機能しました。私はcontextify(jsdomの要件)を手動でインストールする必要がありました( 'npm install contextify -f').nodeファイルをhttps://github.com/Benvie/contextify/downloadsからbuild/Releaseにコピーして 'npm install jsdom'と 'npm install vows'を実行する必要がありました。それはcygwinのを意識しているように、

+0

これは質問に答えたのでnpmで修正されました:https://github.com/isaacs/npm/issues/2465 – pkh

答えて

3

あなたはnpmスクリプトを編集することができます

#!/bin/sh 
cygwin=false; 
case "`uname`" in 
    CYGWIN*) cygwin=true; 
esac 

basedir=`dirname "$0"` 

if $cygwin; then 
    basedir=`cygpath -w "$basedir"` 
fi 

if [ -x "`dirname "$0"`/node.exe" ]; then 
    "$basedir/node.exe" "$basedir/node_modules/npm/bin/npm-cli.js" "[email protected]" 
else 
    node "$basedir/node_modules/npm/bin/npm-cli.js" "[email protected]" 
fi 
+0

ロニンの回答ごとにCYGWIN検出が更新されました。 – pkh

2

を私は(PKHの答えは私のために動作しませんでしたので、CYGWIN環境変数を持っていますが、NPMのスクリプトを変更しないでくださいデフォルトではC:\ Program Files \ nodejsにあります)、これはすべてのCygwin環境で動作するはずです。

#!/bin/sh 

NODE_DIR=`dirname "$0"` 
case `uname` in 
    *CYGWIN*) NODE_DIR=`cygpath -w "$NODE_DIR"`;; 
esac 

if [ -x "`dirname "$0"`/node.exe" ]; then 
    "`dirname "$0"`/node.exe" "$NODE_DIR/node_modules/npm/bin/npm-cli.js" "[email protected]" 
else 
    node "$NODE_DIR/node_modules/npm/bin/npm-cli.js" "[email protected]" 
fi 

あなたはcygwinのbashプロンプトにいる場合は、スクリプトを編集したくない場合は、あなたもnpm.cmd代わりにNPMの実行することができます。

+0

はい、これは間違いありません - 私はどこかのrcファイルでunameチェックをしており、その事実を完全に忘れていました。 – pkh

関連する問題