2012-03-01 11 views
9

Próbuję zbudować d3.js pod Windows. Zainstalowałem cygwin, aby uruchomić plik Makefile. Jednakże, jako część make install, wywołuje „npm install”, a to wywołanie kończy się niepowodzeniem:Budowanie d3.js na Windows (Cygwin) - dobre obejście problemu dotyczącego ścieżki "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 

Problemy wydaje się, że Cygwin przedrostek ścieżki („cygdrive \ c”) jest dodawany do ścieżki pliku (poza tym ścieżka jest poprawna).

Zastanawiam się, czy istnieje dobre obejście tego problemu? Próbowałem wyeksportować zmienną NODE_PATH, a także zmienić ją w pliku Makefile. Nie wpływa to jednak na ten błąd (i wolałbym zachować plik Makefile, jaki jest).

EDYTOWANIE: działało, gdy nazwałem "npm install" z wiersza poleceń Webstorm (bez cygwin). Musiałem ręcznie zainstalować contextify (wymóg jsdom) ("npm install contextify -f", a następnie skopiuj plik .node z https://github.com/Benvie/contextify/downloads do build/Release dla contextify), a następnie uruchomić "npm install jsdom" i "npm install vows" .

+0

Zostało to naprawione w npm, ponieważ pytanie zostało odebrane: https://github.com/isaacs/npm/issues/2465 – pkh

Odpowiedz

3

można edytować skrypt npm tak, że jest świadomy cygwin:

#!/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

Zaktualizowano wykrywanie CYGWIN na odpowiedź ronina. – pkh

2

nie mam zmiennej środowiskowej Cygwin więc odpowiedź PKH za nie działa dla mnie, ale zmieniając skrypt npm (domyślnie w C: \ Program Files \ nodejs) powinno to działać we wszystkich środowiskach 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 

Jeśli jesteś na cygwin wierszu bash, można również uruchomić npm.cmd zamiast KMP, jeśli nie chcesz zmieniać skrypt.

+0

Argh. Tak, to jest poprawne - mam uname sprawdzić gdzieś plik rc i zupełnie zapomniałem o tym fakcie. – pkh

Powiązane problemy