在Windows上构建d3.js(Cygwin)——这是解决';npm安装';路径问题?

在Windows上构建d3.js(Cygwin)——这是解决';npm安装';路径问题?,cygwin,npm,d3.js,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

我正在尝试在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
问题似乎是将cygwin路径前缀(“cygdrive\c”)添加到文件路径(除此之外,路径是正确的)

我想知道是否有一个很好的解决这个问题的办法?我尝试导出NODE_PATH变量,并在Makefile中对其进行更改。但是,这不会影响这个错误(我更愿意保持Makefile的原样)


编辑:当我从Webstorm命令行调用“npm安装”时(没有cygwin),它起作用了。我必须手动安装contextify(jsdom要求)(“npm install contextify-f”然后将.node文件从复制到contextify的build/Release中),然后运行“npm install jsdom”和“npm install vows”。

您可以编辑
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

我没有CYGWIN环境变量,因此pkh的答案对我不起作用,但是像这样更改npm脚本(默认情况下在C:\Program Files\NodeJ中)应该适用于所有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" "$@"
else
  node "$NODE_DIR/node_modules/npm/bin/npm-cli.js" "$@"
fi

如果在cygwin bash提示符下,如果不想编辑脚本,也可以运行npm.cmd而不是npm。

Argh。是的,这是正确的——我在某个地方的rc文件中有uname检查,并且完全忘记了这个事实。根据ronin的回答更新了CYGWIN检测。这一问题在npm中得到了解决: