npm install <module> постоянная ошибка? (сборка узла-гипа?)

Я пытаюсь установить JSDOM такой:

$ sudo npm install -g jsdom
# OR
$ sudo npm install    jsdom

После некоторой успешной команды установка быстро завершается неудачно, а первое сообщение об ошибке появляется после [....]:

$ sudo npm install jsdom 
npm http GET https://registry.npmjs.org/jsdom
npm http 304 https://registry.npmjs.org/jsdom
[....]

> contextify@0.1.7 install /home/yug/Desktop/QGis/WikiAtlas/1_shaded_relief/test/node_modules/jsdom/node_modules/contextify
> node-gyp rebuild

gyp: /home/yug/.node-gyp/0.10.25/common.gypi not found (cwd: /home/yug/Desktop/QGis/WikiAtlas/1_shaded_relief/test/node_modules/jsdom/node_modules/contextify) while reading includes of binding.gyp
gyp ERR! configure error 
gyp ERR! stack Error: `gyp` failed with exit code: 1
gyp ERR! stack     at ChildProcess.onCpExit (/usr/lib/node_modules/npm/node_modules/node-gyp/lib/configure.js:337:16)
gyp ERR! stack     at ChildProcess.EventEmitter.emit (events.js:98:17)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (child_process.js:797:12)
gyp ERR! System Linux 3.8.0-35-generic
gyp ERR! command "node" "/usr/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
gyp ERR! cwd /home/yug/Desktop/QGis/WikiAtlas/1_shaded_relief/test/node_modules/jsdom/node_modules/contextify
gyp ERR! node -v v0.10.25
gyp ERR! node-gyp -v v0.12.2
gyp ERR! not ok 
npm http 304 https://registry.npmjs.org/domhandler
npm http 304 https://registry.npmjs.org/domelementtype
npm ERR! contextify@0.1.7 install: `node-gyp rebuild`
npm ERR! Exit status 1
npm ERR! 
npm ERR! Failed at the contextify@0.1.7 install script.
npm ERR! This is most likely a problem with the contextify package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR!     node-gyp rebuild
npm ERR! You can get their info via:
npm ERR!     npm owner ls contextify
npm ERR! There is likely additional logging output above.

npm ERR! System Linux 3.8.0-35-generic
npm ERR! command "/usr/bin/node" "/usr/bin/npm" "install" "jsdom"
npm ERR! cwd /home/yug/Desktop/QGis/WikiAtlas/1_shaded_relief/test
npm ERR! node -v v0.10.25
npm ERR! npm -v 1.3.24
npm ERR! code ELIFECYCLE

npm http 304 https://registry.npmjs.org/qs
npm http 304 https://registry.npmjs.org/entities
....

Подсказка? Эта ошибка также появляется для других модулей:

 $sudo npm install -g topojson 
 #bug with `contextify@0.1.7 install` error as well.

Как это исправить?


Изменить: я пытался sudo apt-get remove --purge nodejs npm topojson затем переустановка различными способами. Даже когда nodejsпереустановка прошла успешно, ошибка остается, поэтому я думаю, что это довольно контекстно (node.gyp?cwd?...). Удалить / переустановить попробуйте:

3 ответа

Решение

Кажется, я нашел способ, тщательно удалив все связанные с узлами файлы и папки на моем компьютере.

0. Контекст. Ранее я провел несколько неудачных попыток очистки консоли.

sudo apt-get remove --purge nodejs npm topojson

а затем ~3 разных способа переустановки nodejs, Я пробовал КАЖДЫЙ способ, от очистки до переустановки, между 2 и 4 раза.

1. Терминальная чистка. Давайте сначала очистим мой беспорядок как можно глубже:

npm cache clean; bower cache clean; grunt clean;
sudo apt-get remove --purge nodejs npm topojson

Тем не менее, я только что заметил, что эта глубокая очистка НЕ ​​очищает / удаляет установленные модули узлов, которые остаются постоянными.

2. Ручная чистка: также, я продвинул чистку с ручной чисткой для обоих nodejs а также node_modules, Я искал ВСЕ связанные папки на моем компьютере, ближе к корню (Ubuntu: /home/<user>/) лучшее. Я был осторожен, чтобы удалить все ранее установленные глобальные .../node-modules/ папки, без удаления локальных модулей (определенные локальные установки, которые все еще работали).

3. Переустановите: тогда следующие консоли позволили чистую переустановку:

sudo apt-get update
sudo apt-get install python-software-properties python g++ make
sudo add-apt-repository ppa:chris-lea/node.js
sudo apt-get update
sudo apt-get install nodejs

sudo npm install -g topojson jsdom

После этого мой файл конвертируется через модуль npm topojson (в зависимости от jsdom) отлично работал

cd /myfolder/
topojson -o output.topo.json input.geo.json   

4. Вывод: не могу определить, почему, какое удаление файла / папки позволило успешно sudo apt-get install nodejs + sudo npm install -g topojson переустанавливать. Но это глубокая очистка с помощью мыши и рекурсивное удаление sudo rm -r [node related folder/file] окончательно разблокировал мою ситуацию.

/! \ Будьте очень осторожны с rm -rрекурсивное удаление. /!\

Как вы выяснили из комментариев, это очень распространенная проблема. Фактически, настолько часто, что авторы jsdom задокументировали это прямо в файле README для репозитория проекта git.


TL; DR

Вам нужно иметь компилятор C++ и Python 2.7, установленный на вашем компьютере, чтобы установить contextify, который является зависимостью от jsdom. В противном случае установка jsdom не удастся.


Из README на странице Github для jsdom:

Contextify

Contextify - это зависимость от jsdom, используемая для запуска <script> теги на странице. Другими словами, он позволяет jsdom, который запускается в Node.js, запускать строки JavaScript в изолированной среде, которая притворяется браузерной средой, а не сервером. Вы можете увидеть, как это важная особенность.

К сожалению, для создания такого рода магии требуется C++. А в Node.js использование C++ из JavaScript означает использование "собственных модулей". Собственные модули компилируются во время установки, чтобы они работали именно для вашей машины; то есть вы не загружаете двоичный файл контекста из npm, а собираете его локально после загрузки исходного кода из npm.

К сожалению, сборка C++ в системе установки npm может быть сложной, особенно для пользователей Windows. Таким образом, одной из наиболее распространенных проблем с jsdom является попытка использовать его без установленных инструментов компиляции. Вот что вам нужно для компиляции Contextify и, следовательно, для установки jsdom:

Windows

  • Недавняя копия версии Node.js для Windows x86, а не версии x64.
  • Копия Visual C++ 2010 Express.
  • Копия Python 2.7, установленная по умолчанию в C:\Python27.

Есть несколько небольших модификаций, которые могут сработать; например, полные версии Visual Studio обычно работают, а иногда вы даже можете получить работающую версию Node.js для x64. Но это сложно, так что начните с основ!

макинтош

  • XCode должен быть установлен
  • "Инструменты командной строки для XCode" должны быть установлены
  • Запустите XCode один раз, чтобы принять лицензию и т. Д., И убедитесь, что она правильно установлена.

Linux

Вам понадобятся различные инструменты сборки, такие как make, Python 2.7 и набор инструментов компилятора. Как их установить, будет зависеть от вашего дистрибутива, если у вас их еще нет.

Попробуйте снова установить jsdom после выполнения требований, указанных выше для вашей ОС, и посмотрите, решит ли это это.

Кстати, у вас возникает та же проблема с топойсон, потому что он зависит от d3, который, в свою очередь, зависит от jsdom, так что это точно такая же проблема при установке jsdom. Надеюсь это поможет!

--РЕДАКТИРОВАТЬ--

Так как кажется, что вы используете Ubuntu, я бы рекомендовал начать со следующей команды:

sudo apt-get install build-essential

Это установит make и g++ и некоторые другие инструменты. Этот пакет и Python2.7 - это, вероятно, все, что вам нужно для успешной установки contextify.

Решение 1b: Я [подозреваю][1] rm -r /home/<user>/local/lib/node_modules/ быть ключевым элементом, открывающим ситуацию. Вы можете перечислить глобальный (-g) node_modules, затем удалите соответствующий (ие)topojson и / или jsdom и / или node-gyp), а затем переустановите его (их).

Команды: В Ubuntu попробуйте...

 cd /home/<user>/local/lib/node_modules/  #replace <user> by relevant user name to set your cwd
 ls -1      # give the list of global modules names
 rm -r /<module_name>    #replace <module_name> by relevant name to remove it
 sudo npm install -g <module_name>  #replace <module_name> by relevant name for global install

Замечания: topojson зависит от jsdom а также npm-gyp,

[1]: не пробовал, но имеет смысл согласно моей диагностике.

Другие вопросы по тегам