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