Как получить node -gyp для работы на платформе Windows 7

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

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

  • node -gyp 0.12.2
  • Windows 7 x64 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 cmd

Refs:
[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': redefinition; различные базовые типы [...\build\test.vcxproj]

.... node-gyp\0.10.24\deps\uv\include\mswsock.h(27): фатальная ошибка C 1083: Не удается открыть файл include: '_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   

Ответы

Ответ 1

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

Итак, вот ответ не-должен-но-он-работает.

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

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

Если вы ищете свою систему для файла "uv.h", вы можете получить некоторые результаты IF, которые вы ранее установили версии 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 найти node, так что npm может скомпилировать собственные модули.

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

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

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

Ответ 2

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

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

Ответ 3

Это помогло мне это решить:

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

Каталог 1:

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

Каталог 2:

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


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

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

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

РЕШЕНИЕ:

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

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