2012-03-01 15 views
9

Estoy intentando construir d3.js en Windows. He instalado cygwin para ejecutar el archivo MAKE. Sin embargo, como parte de make install, que denomina 'NPM instalar', y no pasa esta llamada:Creación de d3.js en Windows (Cygwin): ¿buena solución para el problema de la ruta '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 

Los problemas parece ser que el prefijo de ruta cygwin ('cygdrive \ c') se añade a la ruta del archivo (aparte de eso, el camino es correcto).

Me pregunto si hay una buena solución para este problema? Intenté exportar la variable NODE_PATH y cambiarla en el archivo Makefile. Sin embargo, esto no afecta este error (y preferiría mantener el Makefile como está).

EDITAR: Funcionó cuando llamé a 'npm install' desde la línea de comandos de Webstorm (sin cygwin). Tuve que instalar contextify (requisito de jsdom) manualmente ('npm install contextify -f' y luego copiar el archivo .node de https://github.com/Benvie/contextify/downloads en build/Release para contextualizar), y ejecutar 'npm install jsdom' y 'npm instalar votos' posteriormente .

+0

Esto se ha solucionado en npm desde que se respondió la pregunta: https://github.com/isaacs/npm/issues/2465 – pkh

Respuesta

3

puede editar el script de npm para que sea consciente de 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

Detección de CYGWIN actualizada por respuesta de ronin. – pkh

2

que no tienen una variable de entorno CYGWIN así la respuesta de pkh no funcionó para mí, pero cambiando el guión NPM (de forma predeterminada en C: \ Program Files \ nodejs) así debería funcionar para todos los entornos 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 

Si estás en un símbolo del fiesta de cygwin, también puede ejecutar npm.cmd en lugar de NPM si no desea modificar la secuencia de comandos.

+0

Argh. Sí, esto es correcto. Tengo el control de uname en un archivo RC en alguna parte, y había olvidado por completo ese hecho. – pkh