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