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



我正在尝试在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:cygdrivecProgram Files (x86)nodejsnode_modulesnpmbinnpm-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 install"时(没有cygwin),它就工作了。我不得不手动安装contextify(jsdom要求)('npm install contextify-f',然后从中复制.node文件https://github.com/Benvie/contextify/downloads进入contextify的build/Release),然后运行"npm-install-jsdom"one_answers"npm install-writes"。

您可以编辑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\nodejs中)应该适用于所有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。

最新更新