如何让node-gyp在Windows 7平台上工作?

在尝试编译标准的“Hello World”示例[2]时,我尝试在Windows 7 + Node.js平台上使用node-gyp失败[3]。 注意:在尝试使用npm install contextify w或不使用“-g”时,node-gyp以类似的方式失败[3],因此这可能是相关的问题。

组态:

  • node-gyp 0.12.2
  • Windows 7 x64 SP1
  • Python 2.7
  • Node.js 0.10.24
  • Visual Studio 2010 per [1](也试过2012)
  • VS SDK 7.1每[1](尝试32和64位版本)
  • 从标准Windows命令提示符或SDK7.1 cmd提示符下运行node-gyp

参考文献:
[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]“hello world”[2]项目中的“node-gyp rebuild”产生以下2个错误:

…. node-gyp \ 0.10.24 \ deps \ uv \ include \ win.h(8738):error C2371:'SYSTEM_POWER_STATUS':redefinition; 不同的基本types[… \ build \ test.vcxproj]

…. node-gyp \ 0.10.24 \ deps \ uv \ include \ mswsock.h(27):fatal error C 1083:Can not open include file:'_mingw.h':No such file or directory [… \编译\ test.vcxproj]

并遵循两个警告:

…. node-gyp \ 0.10.24 \ deps \ uv \ include \ win.h(13513):warning C4005:'UNALIGNED':macros重定义[… \ build \ test.vcxproj]

…. node-gyp \ 0.10.24 \ deps \ uv \ include \ mswsock.h(26):warning C4068:unknown pragma [… \ build \ test.vcxproj]

完整的轨迹如下:

 C:\sigma\node_modules\x>node-gyp rebuild gyp info it worked if it ends with ok gyp info using node-gyp@0.12.2 gyp info using node@0.10.24 | 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 sh(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 

虽然这个问题是一个月大,但我最终在网上搜索,这是搜索结果的一部分。

所以这里是一个不应该做但它是作品的答案。

首先,我不熟悉node-gyp或整个visual studio编译和东西,我真的很感到遗憾的节点gyp取决于python(一个非常沉默的WTF

因此,没有已知的原因nodejs版本比0.10.22(我现在运行,所以我假设它在哪里开始)

如果你搜索你的系统文件“uv.h”,你可能会得到一些结果, 如果你以前安装nodejs版本,否则你可以继续阅读。

我以前的0.10.3 nodejs版本有uv.h到node- uv.h有的像

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

所以如果你阅读npm文档,你会发现npm install的参数

–nodeir = / path / to / node / source参数将允许npm找到节点源代码,以便npm可以编译本地模块。

所以最后的命令应该是

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

您可能会收到一些警告,但应该成功完成。

在你做任何事情之前,通过从节点网站安装来更新Node和NPM(更新节点和npm通过npm似乎在Windows上被破坏,我不确定那些delete-and-reinstall-everything-in-order的指令是最新的但那肯定会成为一个主要的PITA,因为这个职位在节点年龄有点老,所以激励我寻找替代方案。

最终,这为我解决了一个问题,使用node-gyp作为pg模块的依赖关系,并且它与vs 2013一起运行,我相信(至少在开始工作之前就是这样的)。

这是我帮助解决的问题:

出于某种原因,我有两个不同的目录中的节点gyp。

目录1:

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

目录2:

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

在第二个目录中,我在deps文件夹中有一个uv文件夹,但该文件夹不在第一个目录中。

这里是路径 – 注意它里面有uv.h文件。

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

解:

我只是将uv和所有其他额外的文件夹从目录2移到目录1。

@Phoenix的回答给了我一点提示,最终帮我解决了这个问题,谢谢菲尼克斯。