在Windows上构建d3.js(Cygwin) - "npm install"路径问题的良好解决方法?

Lar*_*mel 9 cygwin npm d3.js

我正在尝试在Windows下构建d3.js.我已经安装了cygwin来运行makefile.但是,作为make install的一部分,它调用'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
Run Code Online (Sandbox Code Playgroud)

问题似乎是cygwin路径前缀('cygdrive\c')被添加到文件路径中(除此之外,路径是正确的).

我想知道这个问题是否有一个好的解决方法?我试图导出NODE_PATH变量以及在Makefile中更改它.但是,这不会影响此错误(我宁愿保持Makefile不变).

编辑:当我从Webstorm命令行(没有cygwin)调用'npm install'时它工作.我必须手动安装contextify(jsdom要求)('npm install contextify -f'然后将.node文件从https://github.com/Benvie/contextify/downloads复制到build/Release for contextify),然后运行之后'npm install jsdom'和'npm install vows'.

pkh*_*pkh 3

您可以编辑该npm脚本,使其支持 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" "$@"
else
  node "$basedir/node_modules/npm/bin/npm-cli.js" "$@"
fi
Run Code Online (Sandbox Code Playgroud)