постоянная ошибка установки npm? (сборка node-gyp)

Я пытаюсь установить 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.

enter image description here

как исправить ?


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

  • ubuntu_setup.sh
    • с собственным устаревшим url
    • С url обновлен доhttps://github.com/joyent/node.git,
  • sudo add-apt-repository ppa:chris-lea/node.js,
  • ручной работы git clone https://github.com/joyent/node.git (суд отменил)
  • используя различные другие способы :
    • way1: ogoing

3 ответов


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


TL; DR

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


из README on the страница Github для jsdom:

Contextify

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

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

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

окна

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

есть некоторые незначительные изменения, которые могут работать, например полные версии Visual Studio обычно работают, и иногда вы даже можете получить x64 версию узла.js тоже работает. Но это сложно, так что начните с основ!

Mac

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

Linux

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

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

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

-- EDIT--

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

sudo apt-get install build-essential

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


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

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>/), тем лучше. Я был осторожен, чтобы удалить все ранее установленные global .../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

Afterwhat, мое преобразование файлов через npm module 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] окончательно разблокирована моя ситуация.

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


решение 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]: не пробовал, но смысл по моему диагностический.