2012-03-01 7 views
9

Sto provando a creare d3.js sotto Windows. Ho installato cygwin per eseguire il makefile. Tuttavia, come parte di make install, si chiama 'NPM install', e questa chiamata non riesce:Costruire d3.js su Windows (Cygwin) - buona soluzione per il problema del percorso '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 

I problemi sembra essere che il prefisso percorso Cygwin ('cygdrive \ c') si aggiunge al percorso del file (a parte questo, il percorso è corretto).

Mi chiedo se esiste una buona soluzione per questo problema? Ho provato ad esportare la variabile NODE_PATH e a cambiarla nel Makefile. Tuttavia, questo non influisce su questo errore (e preferirei mantenere il Makefile così com'è).

EDIT: Ha funzionato quando ho chiamato 'npm install' dalla riga di comando Webstorm (senza cygwin). Ho dovuto installare manualmente contextify (requisito jsdom) ('npm install contextify -f' e poi copiare il file .node da https://github.com/Benvie/contextify/downloads in build/Release per contextify), ed eseguire 'npm install jsdom' e 'npm install vows' successivamente .

+0

Questo problema è stato risolto in npm poiché la domanda ha avuto risposta: https://github.com/isaacs/npm/issues/2465 – pkh

risposta

3

è possibile modificare lo script npm in modo che sia cygwin-aware:

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

Rilevamento CYGWIN aggiornato per risposta di ronin. – pkh

2

non ho una variabile di ambiente CYGWIN così la risposta di PKH non ha funzionato per me, ma cambiare lo script NPM (di default in C: \ Programmi \ nodejs) come questo dovrebbe funzionare per tutti gli ambienti 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 

Se siete al prompt bash cygwin, è anche possibile eseguire npm.cmd invece di NPM se non si desidera modificare lo script.

+0

Argh. Sì, questo è corretto - ho il controllo uname in un file rc da qualche parte, e ho completamente dimenticato questo fatto. – pkh