Сборка d3.js в Windows (Cygwin) - хороший обходной путь для проблемы пути установки npm? - PullRequest
9 голосов
/ 01 марта 2012

Я пытаюсь собрать d3.js под Windows.Я установил Cygwin для запуска make-файла.Однако, как часть 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 как есть).

EDIT: Это работало, когда я вызывал 'npm install' из командной строки Webstorm (без cygwin).Мне пришлось установить contextify (требование jsdom) вручную ('npm install contextify -f', а затем скопировать файл .node из https://github.com/Benvie/contextify/downloads в build / Release для contextify) и запустить 'npm install jsdom' и 'npm install vows 'впоследствии.

Ответы [ 2 ]

3 голосов
/ 21 мая 2012

Вы можете отредактировать скрипт 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
2 голосов
/ 03 июня 2012

У меня нет переменной окружения 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, если не хотите редактировать скрипт.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...