Как заставить node-gyp работать на платформе Windows 7

Мои попытки использовать node-gyp на платформе Windows 7 + Node.js потерпели неудачу [3] при попытке скомпилировать стандартный пример «Hello World» [2]. Примечание: node-gyp не работает аналогичным образом [3] при попытке npm install contextify w или без "-g", таким образом, это могут быть связанные проблемы.

Конфигурация:

  • узел-гипп 0.12.2
  • Windows 7 x64 с пакетом обновления 1 (SP1)
  • Python 2.7
  • Node.js 0.10.24
  • Visual Studio 2010 по [1] (также пробовал 2012)
  • VS SDK 7.1 по [1] (пробовали 32- и 64-битные версии)
  • запуск node-gyp из стандартной командной строки Windows или командной строки SDK7.1

Ссылки:
[1] https://github.com/TooTallNate/node-gyp/wiki/Visual-Studio-2010-Setup

[2] https://github.com/joyent/node/tree/master/test/addons/hello-world

[3] "node-gyp rebuild" в проекте "hello world" [2] выдает следующие 2 ошибки:

.... node-gyp \ 0.10.24 \ deps \ uv \ include \ win.h (8738): ошибка C2371: 'SYSTEM_POWER_STATUS': переопределение; различные базовые типы [... \ build \ test.vcxproj]

.... node-gyp \ 0.10.24 \ deps \ uv \ include \ mswsock.h (27): фатальная ошибка C 1083: не удается открыть включаемый файл: '_mingw.h': нет такого файла или каталога [... \ build \ test.vcxproj]

и следующие 2 предупреждения:

.... node-gyp \ 0.10.24 \ deps \ uv \ include \ win.h (13513): предупреждение C4005: 'UNALIGNED': переопределение макроса [... \ build \ test.vcxproj]

.... node-gyp \ 0.10.24 \ deps \ uv \ include \ mswsock.h (26): предупреждение C4068: неизвестная прагма [... \ build \ test.vcxproj]

Полный след следует ниже:

C:\sigma\node_modules\x>node-gyp rebuild
gyp info it worked if it ends with ok
gyp info using [email protected]
gyp info using [email protected] | win32 | x64
gyp info spawn python
gyp info spawn args [ 'C:\\Users\\Anybody\\AppData\\Roaming\\npm\\node_modules\\node-gyp\\gyp\\gyp_main.py',
gyp info spawn args   'binding.gyp',
gyp info spawn args   '-f',
gyp info spawn args   'msvs',
gyp info spawn args   '-G',
gyp info spawn args   'msvs_version=auto',
gyp info spawn args   '-I',
gyp info spawn args   'C:\\sigma\\node_modules\\x\\build\\config.gypi',
gyp info spawn args   '-I',
gyp info spawn args   'C:\\Users\\Anybody\\AppData\\Roaming\\npm\\node_modules\\node-gyp\\addon.gypi',
gyp info spawn args   '-I',
gyp info spawn args   'C:\\Users\\Anybody\\.node-gyp\\0.10.24\\common.gypi',
gyp info spawn args   '-Dlibrary=shared_library',
gyp info spawn args   '-Dvisibility=default',
gyp info spawn args   '-Dnode_root_dir=C:\\Users\\Anybody\\.node-gyp\\0.10.24',
gyp info spawn args   '-Dmodule_root_dir=C:\\sigma\\node_modules\\x',
gyp info spawn args   '--depth=.',
gyp info spawn args   '--generator-output',
gyp info spawn args   'C:\\sigma\\node_modules\\x\\build',
gyp info spawn args   '-Goutput_dir=.' ]
gyp info spawn msbuild
gyp info spawn args [ 'build/binding.sln',
gyp info spawn args   '/clp:Verbosity=minimal',
gyp info spawn args   '/nologo',
gyp info spawn args   '/p:Configuration=Release;Platform=x64' ]
Building the projects in this solution one at a time. To enable parallel build, please add the "/m" switch.  test.cpp
C:\Users\Anybody\.node-gyp\0.10.24\deps\uv\include\win.h(8738): error C2371: 'SYSTEM_POWER_STATUS' : redefinition; different basic types [C:\sigma\node_modules\x\build\test.vcxproj]  C:\Users\Anybody\.node-gyp\0.10.24\deps\uv\include\win.h(8737) : see declaration of 'SYSTEM_POWER_STATUS'

C:\Users\Anybody\.node-gyp\0.10.24\deps\uv\include\win.h(13513): warning C4005: 'UNALIGNED' : macro redefinition [C:\sigma\node_modules\x\build\test.vcxproj] C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\crtdef s.h(502) : see previous definition of 'UNALIGNED'

C:\Users\Anybody\.node-gyp\0.10.24\deps\uv\include\mswsock.h(26): warning C4068 : unknown pragma [C:\sigma\node_modules\x\build\test.vcxproj] C:\Users\Anybody\.node-gyp\0.10.24\deps\uv\include\_mingw.h(33): warning C4068: unknown pragma [C:\sigma\node_modules\x\build\test.vcxproj]

C:\Users\Anybody\.node-gyp\0.10.24\deps\uv\include\_mingw.h(51): fatal error C1 189: #error :  ERROR: You must use a GNU Compiler. [C:\sigma\node_modules\x\build\test.vcxproj]

gyp ERR! build error
gyp ERR! stack Error: msbuild failed with exit code: 1
gyp ERR! stack at ChildProcess.onExit (C:\Users\Anybody\AppData\Roaming\npm\
node_modules\node-gyp\lib\build.js:267:23)
gyp ERR! stack at ChildProcess.EventEmitter.emit (events.js:98:17)
gyp ERR! stack at Process.ChildProcess._handle.onexit (child_process.js:789:12)
gyp ERR! System Windows_NT 6.1.7601
gyp ERR! command "node" "C:\\Users\\Anybody\\AppData\\Roaming\\npm\\node_modules\\node-gyp\\bin\\node-gyp.js" "rebuild"
gyp ERR! cwd C:\sigma\node_modules\x
gyp ERR! node -v v0.10.24
gyp ERR! node-gyp -v v0.12.2
gyp ERR! not ok   

person user3208880    schedule 18.01.2014    source источник
comment
У меня та же проблема ~ Я выполнил все шаги из [Refs [1]] (github.com/TooTallNate/node-gyp/wiki/Visual-Studio-2010-Setup), вы решили это? если да, поделитесь пожалуйста.   -  person Imran Bughio    schedule 22.05.2014
comment
Добавьте к этой проблеме свой пользовательский опыт: github.com/TooTallNate/node-gyp/issues / 662 может быть, они добавят подходящий установщик, если к нему присоединится больше людей.   -  person inf3rno    schedule 09.07.2015


Ответы (3)


Хотя этому вопросу один месяц, я искал в Интернете, и это было частью результатов поиска.

Итак, вот ответ «не надо делать, но он работает».

Во-первых, я не знаком с node-gyp или всей компиляцией Visual Studio и прочим, мне действительно очень жаль node-gyp в зависимости от python (очень тихий WTF)

Итак, по неизвестной причине версия nodejs старше 0.10.22 (я запускаю ее сейчас, поэтому я предполагаю, что она там, где она начинается)

Если вы выполните поиск в своей системе файла "uv.h", вы можете получить некоторые результаты ЕСЛИ вы ранее установили версии nodejs, иначе вы могли бы продолжить чтение.

в моей предыдущей версии 0.10.3 nodejs было uv.h в node-gyp что-то вроде

<DRIVERLETTER>:\Users\<USERNAME>\.node-gyp\0.10.3\deps\uv

поэтому, если вы прочитаете документацию npm, вы найдете аргумент на npm install

Аргумент --nodedir = / path / to / node / source позволит npm найти исходный код узла, чтобы npm мог компилировать собственные модули.

поэтому последняя команда должна быть

npm install <package> --nodedir="<DRIVERLETTER>:\Users\<USERNAME\.node-gyp\0.10.3"

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

person Gntem    schedule 03.03.2014
comment
У меня нет версии 0.10.3, но я нашел uv.h файл в версии 0.10.21 - пытаюсь установить модуль jsdom - все еще та же ошибка. - person Imran Bughio; 22.05.2014
comment
+1 за WTF. Node-gyp в windows7 - самый большой позор, который сильно снижает удобство использования узла. - person setec; 09.10.2014
comment
--nodedir следует указывать до \dep\uv, например _3 _ ??. - person Sithu; 21.11.2014
comment
Придется согласиться с @setec. Тоже винда ужасная. - person blong; 28.05.2015
comment
Это может помочь любому, кто пытается решить эту проблему: robertkehoe.com/2015/03/fix-node-gyp-rebuild-error-on-windows - person blong; 28.05.2015
comment
Также теперь можно работать без VS, поскольку они снова предлагают независимые компиляторы Windows c в Win SDK. И нет ничего постыдного в зависимости от Python. У этих ребят уже много лет прикрывают окна махинациями. - person Erik Reppen; 10.10.2015

Прежде чем что-либо делать, обновите Node и NPM, установив с веб-сайта node (обновление node и npm через npm, похоже, не работает в Windows. Я не уверен, что эти инструкции по удалению и переустановке всего по порядку актуальны но это, безусловно, будет основным PITA, что вдохновило меня на поиск альтернатив, учитывая, что этот пост был немного староват для узловых лет.

В конечном итоге это решило для меня проблему с node-gyp в качестве зависимости для модуля pg, и я считаю, что он работал с vs 2013 (или, по крайней мере, это то, что он, казалось, искал до того, как начал работать).

person Erik Reppen    schedule 16.11.2014
comment
Я боролся с этим в течение нескольких дней на нескольких машинах, и установка VS2013 была тем, что окончательно исправило. - person Alex C; 22.09.2015

Вот что помогло мне решить эту проблему:

По какой-то причине у меня был node-gyp в двух разных каталогах.

Каталог 1:

C:\Users\Imran Bughio\.node-gyp\0.10.21\

Каталог 2:

C:\Users\Imran Bughio\Documents\.node-gyp\0.10.21\


Во 2-м каталоге у меня была папка uv внутри папки deps, но этой папки не было в 1-м каталоге.

Вот путь - обратите внимание, что внутри был uv.h файл.

C:\Users\Imran Bughio\.node-gyp\0.10.21\deps\uv

РЕШЕНИЕ:

Я просто переместил uv и все другие дополнительные папки из каталога 2 в каталог 1.

Ответ @Phoenix дал мне небольшой намек, который в конечном итоге помог мне решить эту проблему, поэтому, спасибо, Феникс.

person Imran Bughio    schedule 22.05.2014