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

Posted

技术标签:

【中文标题】如何让 node-gyp 在 Windows 7 平台上工作【英文标题】:How do I get node-gyp to work on Windows 7 platform 【发布时间】:2014-02-07 15:42:28 【问题描述】:

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

配置:

节点-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 per [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): 错误 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 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 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   

【问题讨论】:

我也遇到了同样的问题~我按照[Refs[1]](github.com/TooTallNate/node-gyp/wiki/Visual-Studio-2010-Setup)的所有步骤,你解决了吗?如果是,请分享。 请将您的用户体验添加到此问题中:github.com/TooTallNate/node-gyp/issues/662 如果更多人加入,他们可能会添加适当的安装程序。 【参考方案1】:

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

所以这是一个不应该做但可行的答案。

首先,我不熟悉 node-gyp 或整个 Visual Studio 编译之类的东西,我真的为依赖于 python 的 node-gyp 感到抱歉(一个非常沉默的 WTF ) p>

所以不知道为什么 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 找到 node 源代码,以便 npm 可以编译原生模块。

所以最后的命令应该是

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

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

【讨论】:

我没有0.10.3 版本,但我确实在0.10.21 版本中找到了uv.h 文件——尝试安装jsdom 模块——仍然是同样的错误。 WTF +1。 Windows7 上的 Node-gyp 是最大的耻辱,它给节点可用性本身带来了很大的阴影。 --nodedir 应该指定到\dep\uv 例如--nodedir="&lt;DRIVERLETTER&gt;:\Users\&lt;USERNAME\.node-gyp\0.10.3\dep\uv"??。 必须同意@setec。另外,Windows 很糟糕。 这可能对任何试图解决此问题的人有所帮助:robertkehoe.com/2015/03/fix-node-gyp-rebuild-error-on-windows【参考方案2】:

这就是帮助我解决它的原因:

出于某种原因,我在两个不同的目录中有 node-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 的回答给了我一点提示,最终帮助我解决了这个问题,谢谢 凤凰。

【讨论】:

【参考方案3】:

在你做任何事情之前,通过从节点网站安装来更新节点和 NPM(通过 npm 更新节点和 npm 似乎在 Windows 上被破坏了。我不确定那些删除并重新安装一切的顺序说明是最新的,但那肯定是一个主要的 PITA,考虑到那个帖子在节点年代有点旧,这激发了我寻找替代品。

最终,这为我解决了一个问题,将 node-gyp 作为 pg 模块的依赖项,并且它与 vs 2013 一起运行,我相信(或者至少在它开始工作之前它似乎正在寻找它)。

【讨论】:

我在多台机器上为此苦苦挣扎了好几天,安装 VS2013 最终解决了这个问题。

以上是关于如何让 node-gyp 在 Windows 7 平台上工作的主要内容,如果未能解决你的问题,请参考以下文章

在 Windows 上安装 Yarn 时挂起的 Fibers/node-gyp

如何解决 Windows 10 上的“node-gyp 重建”问题?

Windows npm install node-gyp 错误:libxslt 命令失败

需要 node-gyp 的 npm install 在 Windows 上失败

为 npm 整数安装 node-gyp 错误

在Windows中使用NPM和node-gyp进行故障排除