由 `npm config set msvs_version 2015 --global` 设置的标志未被 electron-rebuild 接受
Flag set by `npm config set msvs_version 2015 --global` is not being honored by electron-rebuild
问题:
我最初在从 VS 2013 升级到 VS 2015 后构建我的应用程序时遇到问题,但通过设置 msvs_version 2015
解决了该问题。虽然这适用于 npm install
(及其节点编译),但它在 electron-rebuild
阶段被忽略了。
详情:
初刊
具体来说,我的构建过程曾经有过这个问题(当我第一次升级时):
22:07:39 c:\work-projects\my-application>c:\CM\elevated_cmd.exe /C "npm install > npm_install.log"<br>
22:22:38
22:22:38 c:\work-projects\my-application>输入 npm_install.log
22:22:38
22:22:38 > libxmljs-mt@0.16.1 安装 c:\work-projects\my-application\node_modules\libxmljs-mt
22:22:38 > node-gyp 重建
22:22:38
22:22:38
22:22:38 c:\work-projects\my-application\node_modules\libxmljs-mt>if not defined npm_config_node_gyp (node "C:\Program Files\nodejs\node_modules\npm\bin\node-gyp-bin\..\..\node_modules\node-gyp\bin\node-gyp.js" rebuild ) else (node "" rebuild )
22:22:38 一次构建此解决方案中的项目。要启用并行构建,请添加“/m”开关。
22:22:38 C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.Cpp.Platform.targets(57,5):错误 MSB8020:v120 的构建工具(平台工具集 = 'v120') 找不到。要使用 v120 构建工具构建,请安装 v120 构建工具。或者,您可以升级到当前的 Visual Studio 工具,方法是选择“项目”菜单或右键单击解决方案,然后选择 "Retarget solution"。 [c:\work-projects\my-application\node_modules\libxmljs-mt\build\xmljs.vcxproj]
初步解决方案
但是这个命令设置很快就解决了这个问题:
npm config set msvs_version 2015 --global
当前问题
一旦我设置了上面的命令,一切似乎都运行良好。 (在 npm install
期间发生的初始编译开始工作正常)。但是一旦我到达使用 electron-rebuild
的构建部分,我发现返回了相同的错误,但仅在 electron-rebuild 编译期间,如下所示:
13:15:32 c:\work-projects\my-application>c:\CM\elevated_cmd.exe /C "gulp erebuild > erebuild.log"<br>
13:16:05
13:16:05 c:\work-projects\my-application>输入 erebuild.log
13:16:05 [13:15:41] 使用 gulp 文件 c:\work-projects\my-application\gulpfile.js
13:16:05 [13:15:41] 开始 'erebuild'...
13:16:05 [13:15:41] 394 毫秒后完成 'erebuild'
13:16:05 [13:16:04] 针对 Electron 重建模块无效:错误:gyp 信息如果以 ok 结尾则有效
13:16:05 使用 node-gyp@3.6.2 的 gyp 信息
13:16:05 使用 node@7.10.1 的 gyp 信息 | Win32 | x64
13:16:05 gyp http GET https://atom.io/download/electron/v1.8.2-beta.4/iojs-v1.8.2-beta.4.tar.gz
13:16:05 gyp http 200 https://atom.io/download/electron/v1.8.2-beta.4/iojs-v1.8.2-beta.4.tar.gz
13:16:05 gyp http GET https://atom.io/download/electron/v1.8.2-beta.4/SHASUMS256.txt
13:16:05 gyp http GET https://atom.io/download/electron/v1.8.2-beta.4/win-x64/iojs.lib
13:16:05 gyp http GET https://atom.io/download/electron/v1.8.2-beta.4/win-x86/iojs.lib
13:16:05 gyp http 200 https://atom.io/download/electron/v1.8.2-beta.4/win-x64/iojs.lib
13:16:05 gyp http 200 https://atom.io/download/electron/v1.8.2-beta.4/SHASUMS256.txt
13:16:05 gyp http 200 https://atom.io/download/electron/v1.8.2-beta.4/win-x86/iojs.lib
13:16:05 gyp 信息生成 C:\Python27\python.exe
13:16:05 gyp 信息生成参数 ['c:\work-projects\my-application\node_modules\node-gyp\gyp\gyp_main.py',
13:16:05 gyp 信息生成参数 'binding.gyp',
13:16:05 gyp 信息生成参数 '-f',
13:16:05 gyp 信息生成参数 'msvs',
13:16:05 gyp 信息生成参数 '-G',
13:16:05 gyp 信息生成参数 'msvs_version=auto',
13:16:05 gyp 信息生成参数 '-I',
13:16:05 gyp 信息生成参数 'c:\work-projects\my-application\node_modules\libxml-xsd\build\config.gypi',
13:16:05 gyp 信息生成参数 '-I',
13:16:05 gyp 信息生成参数 'c:\work-projects\my-application\node_modules\libxml-xsd\common.gypi',
13:16:05 gyp 信息生成参数 '-I',
13:16:05 gyp 信息生成参数 'c:\work-projects\my-application\node_modules\node-gyp\addon.gypi',
13:16:05 gyp 信息生成参数 '-I',
13:16:05 gyp 信息生成参数 'C:\Users\MyBuilderUser\.electron-gyp\.node-gyp\iojs-1.8.2-beta.4\common.gypi',
13:16:05 gyp 信息生成参数 '-Dlibrary=shared_library',
13:16:05 gyp info spawn args '-Dvisibility=default',
13:16:05 gyp 信息生成参数 '-Dnode_root_dir=C:\\Users\\MyBuilderUser\\.electron-gyp\\.node-gyp\\iojs-1.8.2-beta.4',
13:16:05 gyp 信息生成参数 '-Dnode_gyp_dir=c:\\work-projects\\my-application\\node_modules\\node-gyp',
13:16:05 gyp 信息生成参数 '-Dnode_lib_file=C:\\Users\\MyBuilderUser\\.electron-gyp\\.node-gyp\\iojs-1.8.2-beta.4\\< (target_arch)\\iojs.lib',
13:16:05 gyp info spawn args '-Dmodule_root_dir=c:\\work-projects\\my-application\\node_modules\\libxml-xsd',
13:16:05 gyp 信息生成参数 '-Dnode_engine=v8',
13:16:05 gyp 信息生成参数 '--depth=.',
13:16:05 gyp info spawn args '--no-parallel',
13:16:05 gyp info spawn args '--generator-output',
13:16:05 gyp 信息生成参数 'c:\work-projects\my-application\node_modules\libxml-xsd\build',
13:16:05 gyp 信息 spawn args '-Goutput_dir=.' ]
13:16:05 gyp 信息生成 C:\Program Files (x86)\MSBuild.0\bin\msbuild.exe
13:16:05 gyp 信息生成参数 ['build/binding.sln',
13:16:05 gyp info spawn args '/clp:Verbosity=minimal',
13:16:05 gyp 信息 spawn args '/nologo',
13:16:05 gyp 信息 spawn args '/p:Configuration=Release;Platform=x64']
13:16:05 一次构建此解决方案中的项目。要启用并行构建,请添加“/m”开关。
13:16:05 C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.Cpp.Platform.targets(57,5):错误 MSB8020:v120 的构建工具(平台工具集 = 'v120') 找不到。要使用 v120 构建工具构建,请安装 v120 构建工具。或者,您可以升级到当前的 Visual Studio 工具,方法是选择“项目”菜单或右键单击解决方案,然后选择 "Retarget solution"。 [c:\work-projects\my-application\node_modules\libxml-xsd\build\node-libxml-xsd.vcxproj]
13:16:05 gyp 错误!构建错误
13:16:05 gyp 错误!堆栈错误:`C:\Program Files (x86)\MSBuild.0\bin\msbuild.exe` 失败,退出代码:1
13:16:05 gyp 错误!堆栈在 ChildProcess.onExit (c:\work-projects\my-application\node_modules\node-gyp\lib\build.js:258:23)
13:16:05 gyp 错误!堆栈在 emitTwo (events.js:106:13)
13:16:05 gyp 错误!堆叠在 ChildProcess.emit (events.js:194:7)
13:16:05 gyp 错误!堆叠在 Process.ChildProcess._handle.onexit (internal/child_process.js:215:12)
13:16:05 gyp 错误!系统 Windows_NT 6.3.9600
13:16:05 gyp 错误!命令 "C:\Program Files\nodejs\node.exe" "c:\work-projects\my-application\node_modules\node-gyp\bin\node-gyp.js" "rebuild" "--target=1.8.2-beta.4" "--arch=x64" "--dist-url=https:/ /atom.io/download/electron" "--build-from-source"
13:16:05 gyp 错误! cwd c:\work-projects\my-application\node_modules\libxml-xsd
13:16:05 gyp 错误!节点-v v7.10.1
13:16:05 gyp 错误!节点 gyp -v v3.6.2
13:16:05 gyp 错误!不好
13:16:05
13:16:05 退出代码失败:1
相关代码
我的 gulp electron-rebuild 调用非常简单明了,所以我怀疑它会揭示很多东西,但在这里:
```
gulp.task('erebuild', , function () {
var eRebuild = require('electron-rebuild').rebuild;
var arch = process.arch;
eRebuild(
{buildPath: __dirname,
electronVersion: electronVersion,
arch: arch
})
.then(function () {
log('electron version: ' + electronVersion + ' arch version: ' + arch);
log('Electron Rebuild Successful');
return true;
}).catch(function (e) {
log('Rebuilding modules against Electron didn\'t work: ' + e);
});
});
```
有没有我应该添加到我的 electron-rebuild
调用中以强制为其赋予 msvs_version 值的选项?
electron-rebuild
不应该像 npm install
那样自动使用这个值吗?
我注意到在 gyp 配置参数的 electron-rebuild
显示中,msvs_version=auto
显示为它的设置而不是 2015
(请参阅 [=79 中向下的大约 1/3 =] 部分)。如何分配 auto
指向 2015
的值 of/or(或者如何让 electron-rebuild
明确使用 2015 而不是 auto
)?我不完全确定应该如何处理。这是 electron-rebuild
中的错误吗? electron-rebuild
应该有一个选项来指定 msvs_version
吗?或者 auto
应该是我在配置中某处设置的值?如果有怎么办?
最终,这种情况无法通过尝试让 electron-rebuild
以某种方式查看 npm msvs_version
设置的配置来解决。在我的情况下,MS Visual Studio 2015 和 2017 的工具集都是在此过程中安装的,似乎这个 install/uninstall 过程中的某些问题导致了问题。
我为解决这个问题所做的是:
首先,我卸载了所有版本的MSBuild工具,MS Visual Studio
(2015 年和 2017 年,就我而言)甚至 Python.
然后我遵循 "Windows" 中的 "Option 1" 具体说明
https://www.npmjs.com/package/node-gyp#installation 通过执行
npm install --global --production windows-build-tools
因为所有的 VS、MSBuild 工具和 Python 都被重新安装了
windows-build-tools
包安装,Python 设置似乎
略有残缺。为了解决这个问题,我做了以下事情:
a) 配置节点以查看 Python (运行 npm config set python
"C:\Users\MyUser\.windows-build-tools\python27\python.exe"
)
b) 设置 PYTHON 环境变量。您可以使用控制面板或在提升的 CMD 上执行此操作,您可以 运行
set PYTHON "C:\Users\MyUser\.windows-build-tools\python27\python.exe"
在那之后,一切正常。
问题:
我最初在从 VS 2013 升级到 VS 2015 后构建我的应用程序时遇到问题,但通过设置 msvs_version 2015
解决了该问题。虽然这适用于 npm install
(及其节点编译),但它在 electron-rebuild
阶段被忽略了。
详情:
初刊
具体来说,我的构建过程曾经有过这个问题(当我第一次升级时):
22:07:39 c:\work-projects\my-application>c:\CM\elevated_cmd.exe /C "npm install > npm_install.log"<br>
22:22:38
22:22:38 c:\work-projects\my-application>输入 npm_install.log
22:22:38
22:22:38 > libxmljs-mt@0.16.1 安装 c:\work-projects\my-application\node_modules\libxmljs-mt
22:22:38 > node-gyp 重建
22:22:38
22:22:38
22:22:38 c:\work-projects\my-application\node_modules\libxmljs-mt>if not defined npm_config_node_gyp (node "C:\Program Files\nodejs\node_modules\npm\bin\node-gyp-bin\..\..\node_modules\node-gyp\bin\node-gyp.js" rebuild ) else (node "" rebuild )
22:22:38 一次构建此解决方案中的项目。要启用并行构建,请添加“/m”开关。
22:22:38 C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.Cpp.Platform.targets(57,5):错误 MSB8020:v120 的构建工具(平台工具集 = 'v120') 找不到。要使用 v120 构建工具构建,请安装 v120 构建工具。或者,您可以升级到当前的 Visual Studio 工具,方法是选择“项目”菜单或右键单击解决方案,然后选择 "Retarget solution"。 [c:\work-projects\my-application\node_modules\libxmljs-mt\build\xmljs.vcxproj]
初步解决方案
但是这个命令设置很快就解决了这个问题:
npm config set msvs_version 2015 --global
当前问题
一旦我设置了上面的命令,一切似乎都运行良好。 (在 npm install
期间发生的初始编译开始工作正常)。但是一旦我到达使用 electron-rebuild
的构建部分,我发现返回了相同的错误,但仅在 electron-rebuild 编译期间,如下所示:
13:15:32 c:\work-projects\my-application>c:\CM\elevated_cmd.exe /C "gulp erebuild > erebuild.log"<br>
13:16:05
13:16:05 c:\work-projects\my-application>输入 erebuild.log
13:16:05 [13:15:41] 使用 gulp 文件 c:\work-projects\my-application\gulpfile.js
13:16:05 [13:15:41] 开始 'erebuild'...
13:16:05 [13:15:41] 394 毫秒后完成 'erebuild'
13:16:05 [13:16:04] 针对 Electron 重建模块无效:错误:gyp 信息如果以 ok 结尾则有效
13:16:05 使用 node-gyp@3.6.2 的 gyp 信息
13:16:05 使用 node@7.10.1 的 gyp 信息 | Win32 | x64
13:16:05 gyp http GET https://atom.io/download/electron/v1.8.2-beta.4/iojs-v1.8.2-beta.4.tar.gz
13:16:05 gyp http 200 https://atom.io/download/electron/v1.8.2-beta.4/iojs-v1.8.2-beta.4.tar.gz
13:16:05 gyp http GET https://atom.io/download/electron/v1.8.2-beta.4/SHASUMS256.txt
13:16:05 gyp http GET https://atom.io/download/electron/v1.8.2-beta.4/win-x64/iojs.lib
13:16:05 gyp http GET https://atom.io/download/electron/v1.8.2-beta.4/win-x86/iojs.lib
13:16:05 gyp http 200 https://atom.io/download/electron/v1.8.2-beta.4/win-x64/iojs.lib
13:16:05 gyp http 200 https://atom.io/download/electron/v1.8.2-beta.4/SHASUMS256.txt
13:16:05 gyp http 200 https://atom.io/download/electron/v1.8.2-beta.4/win-x86/iojs.lib
13:16:05 gyp 信息生成 C:\Python27\python.exe
13:16:05 gyp 信息生成参数 ['c:\work-projects\my-application\node_modules\node-gyp\gyp\gyp_main.py',
13:16:05 gyp 信息生成参数 'binding.gyp',
13:16:05 gyp 信息生成参数 '-f',
13:16:05 gyp 信息生成参数 'msvs',
13:16:05 gyp 信息生成参数 '-G',
13:16:05 gyp 信息生成参数 'msvs_version=auto',
13:16:05 gyp 信息生成参数 '-I',
13:16:05 gyp 信息生成参数 'c:\work-projects\my-application\node_modules\libxml-xsd\build\config.gypi',
13:16:05 gyp 信息生成参数 '-I',
13:16:05 gyp 信息生成参数 'c:\work-projects\my-application\node_modules\libxml-xsd\common.gypi',
13:16:05 gyp 信息生成参数 '-I',
13:16:05 gyp 信息生成参数 'c:\work-projects\my-application\node_modules\node-gyp\addon.gypi',
13:16:05 gyp 信息生成参数 '-I',
13:16:05 gyp 信息生成参数 'C:\Users\MyBuilderUser\.electron-gyp\.node-gyp\iojs-1.8.2-beta.4\common.gypi',
13:16:05 gyp 信息生成参数 '-Dlibrary=shared_library',
13:16:05 gyp info spawn args '-Dvisibility=default',
13:16:05 gyp 信息生成参数 '-Dnode_root_dir=C:\\Users\\MyBuilderUser\\.electron-gyp\\.node-gyp\\iojs-1.8.2-beta.4',
13:16:05 gyp 信息生成参数 '-Dnode_gyp_dir=c:\\work-projects\\my-application\\node_modules\\node-gyp',
13:16:05 gyp 信息生成参数 '-Dnode_lib_file=C:\\Users\\MyBuilderUser\\.electron-gyp\\.node-gyp\\iojs-1.8.2-beta.4\\< (target_arch)\\iojs.lib',
13:16:05 gyp info spawn args '-Dmodule_root_dir=c:\\work-projects\\my-application\\node_modules\\libxml-xsd',
13:16:05 gyp 信息生成参数 '-Dnode_engine=v8',
13:16:05 gyp 信息生成参数 '--depth=.',
13:16:05 gyp info spawn args '--no-parallel',
13:16:05 gyp info spawn args '--generator-output',
13:16:05 gyp 信息生成参数 'c:\work-projects\my-application\node_modules\libxml-xsd\build',
13:16:05 gyp 信息 spawn args '-Goutput_dir=.' ]
13:16:05 gyp 信息生成 C:\Program Files (x86)\MSBuild.0\bin\msbuild.exe
13:16:05 gyp 信息生成参数 ['build/binding.sln',
13:16:05 gyp info spawn args '/clp:Verbosity=minimal',
13:16:05 gyp 信息 spawn args '/nologo',
13:16:05 gyp 信息 spawn args '/p:Configuration=Release;Platform=x64']
13:16:05 一次构建此解决方案中的项目。要启用并行构建,请添加“/m”开关。
13:16:05 C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.Cpp.Platform.targets(57,5):错误 MSB8020:v120 的构建工具(平台工具集 = 'v120') 找不到。要使用 v120 构建工具构建,请安装 v120 构建工具。或者,您可以升级到当前的 Visual Studio 工具,方法是选择“项目”菜单或右键单击解决方案,然后选择 "Retarget solution"。 [c:\work-projects\my-application\node_modules\libxml-xsd\build\node-libxml-xsd.vcxproj]
13:16:05 gyp 错误!构建错误
13:16:05 gyp 错误!堆栈错误:`C:\Program Files (x86)\MSBuild.0\bin\msbuild.exe` 失败,退出代码:1
13:16:05 gyp 错误!堆栈在 ChildProcess.onExit (c:\work-projects\my-application\node_modules\node-gyp\lib\build.js:258:23)
13:16:05 gyp 错误!堆栈在 emitTwo (events.js:106:13)
13:16:05 gyp 错误!堆叠在 ChildProcess.emit (events.js:194:7)
13:16:05 gyp 错误!堆叠在 Process.ChildProcess._handle.onexit (internal/child_process.js:215:12)
13:16:05 gyp 错误!系统 Windows_NT 6.3.9600
13:16:05 gyp 错误!命令 "C:\Program Files\nodejs\node.exe" "c:\work-projects\my-application\node_modules\node-gyp\bin\node-gyp.js" "rebuild" "--target=1.8.2-beta.4" "--arch=x64" "--dist-url=https:/ /atom.io/download/electron" "--build-from-source"
13:16:05 gyp 错误! cwd c:\work-projects\my-application\node_modules\libxml-xsd
13:16:05 gyp 错误!节点-v v7.10.1
13:16:05 gyp 错误!节点 gyp -v v3.6.2
13:16:05 gyp 错误!不好
13:16:05
13:16:05 退出代码失败:1
相关代码
我的 gulp electron-rebuild 调用非常简单明了,所以我怀疑它会揭示很多东西,但在这里:
```
gulp.task('erebuild', , function () {
var eRebuild = require('electron-rebuild').rebuild;
var arch = process.arch;
eRebuild(
{buildPath: __dirname,
electronVersion: electronVersion,
arch: arch
})
.then(function () {
log('electron version: ' + electronVersion + ' arch version: ' + arch);
log('Electron Rebuild Successful');
return true;
}).catch(function (e) {
log('Rebuilding modules against Electron didn\'t work: ' + e);
});
});
```
有没有我应该添加到我的 electron-rebuild
调用中以强制为其赋予 msvs_version 值的选项?
electron-rebuild
不应该像 npm install
那样自动使用这个值吗?
我注意到在 gyp 配置参数的 electron-rebuild
显示中,msvs_version=auto
显示为它的设置而不是 2015
(请参阅 [=79 中向下的大约 1/3 =] 部分)。如何分配 auto
指向 2015
的值 of/or(或者如何让 electron-rebuild
明确使用 2015 而不是 auto
)?我不完全确定应该如何处理。这是 electron-rebuild
中的错误吗? electron-rebuild
应该有一个选项来指定 msvs_version
吗?或者 auto
应该是我在配置中某处设置的值?如果有怎么办?
最终,这种情况无法通过尝试让 electron-rebuild
以某种方式查看 npm msvs_version
设置的配置来解决。在我的情况下,MS Visual Studio 2015 和 2017 的工具集都是在此过程中安装的,似乎这个 install/uninstall 过程中的某些问题导致了问题。
我为解决这个问题所做的是:
首先,我卸载了所有版本的MSBuild工具,MS Visual Studio (2015 年和 2017 年,就我而言)甚至 Python.
然后我遵循 "Windows" 中的 "Option 1" 具体说明 https://www.npmjs.com/package/node-gyp#installation 通过执行
npm install --global --production windows-build-tools
因为所有的 VS、MSBuild 工具和 Python 都被重新安装了
windows-build-tools
包安装,Python 设置似乎 略有残缺。为了解决这个问题,我做了以下事情:a) 配置节点以查看 Python (运行 npm config set python
"C:\Users\MyUser\.windows-build-tools\python27\python.exe"
)b) 设置 PYTHON 环境变量。您可以使用控制面板或在提升的 CMD 上执行此操作,您可以 运行
set PYTHON "C:\Users\MyUser\.windows-build-tools\python27\python.exe"
在那之后,一切正常。