nodejs/electron-forge/node-gyp:在尝试了我可以在网上找到的所有提示后,找不到任何要使用的 Visual Studio 安装
nodejs/electron-forge/node-gyp: Could not find any Visual Studio installation to use after trying all the tips I could find online
简介
在线咨询了数百万条提示后,包括
- How can I solve error gypgyp ERR!ERR! find VSfind VS msvs_version not set from command line or npm config?
- https://github.com/nodejs/node-gyp/issues/1663
- Not looking for VS2013 npm install node modules
和this "comprehensive guide"介绍了与官方文档相悖的想法
我仍然无法安装某些需要通过 npm 或 yarn 进行本地构建的第三方软件包。我也没有收到来自 nodejs
或 node-gyp
github 问题论坛的任何回复。
我即将发布一个已经在 macOS 上使用 electron-forge
构建良好的应用程序,但无法在 Windows.
上运行
主要问题是 npm
用于构建第三方包的依赖项之一 node-gyp
在我的机器上找不到 Visual Studio。我使用 VS2017 Community 并安装了 node-gyp
.
所需的所有组件
我的设置
- 节点版本:
node -v
=v12.18.3 和 npm -v
=6.14.8
- 平台:
systeminfo | findstr /B /C:"OS Name" /C:"OS Version" /C:"System Type"
(Windows)
OS Name: Microsoft Windows 10 Pro
OS Version: 10.0.18362 N/A Build 18362
System Type: x64-based PC
- 编译器:
msbuild /version & cl
(Windows)
Microsoft (R) Build Engine version 15.9.21+g9802d43bc3 for .NET Framework
Copyright (C) Microsoft Corporation. All rights reserved.
15.9.21.664Microsoft (R) C/C++ Optimizing Compiler Version 19.16.27043 for x64
Copyright (C) Microsoft Corporation. All rights reserved.
usage: cl [ option... ] filename... [ /link linkoption... ]
- 模块:zeromq
详细输出(来自 npm 或 node-gyp):
me@me-PC0 D:\Desktop\myapp
# node-gyp configure --msvs_version=2017
gyp info it worked if it ends with ok
gyp info using node-gyp@7.1.0
gyp info using node@12.18.3 | win32 | x64
gyp info find Python using Python version 3.8.5 found at "C:\Python\Python38\python.exe"
gyp ERR! find VS
gyp ERR! find VS msvs_version was set from command line or npm config
gyp ERR! find VS - looking for Visual Studio version 2017
gyp ERR! find VS running in VS Command Prompt, installation path is:
gyp ERR! find VS "C:\Program Files (x86)\Microsoft Visual Studio17"
gyp ERR! find VS - will only use this version
gyp ERR! find VS could not use PowerShell to find Visual Studio 2017 or newer
gyp ERR! find VS looking for Visual Studio 2015
gyp ERR! find VS - found in "C:\Program Files (x86)\Microsoft Visual Studio 14.0"
gyp ERR! find VS - could not find MSBuild in registry for this version
gyp ERR! find VS not looking for VS2013 as it is only supported up to Node.js 8
gyp ERR! find VS msvs_version does not match this VS Command Prompt or the
gyp ERR! find VS installation cannot be used.
gyp ERR! find VS
gyp ERR! find VS **************************************************************
gyp ERR! find VS You need to install the latest version of Visual Studio
gyp ERR! find VS including the "Desktop development with C++" workload.
gyp ERR! find VS For more information consult the documentation at:
gyp ERR! find VS https://github.com/nodejs/node-gyp#on-windows
gyp ERR! find VS **************************************************************
gyp ERR! find VS
gyp ERR! configure error
gyp ERR! stack Error: Could not find any Visual Studio installation to use
gyp ERR! stack at VisualStudioFinder.fail (C:\Users\me\AppData\Roaming\npm\node_modules\node-gyp\lib\find-visualstudio.js:121:47)
gyp ERR! stack at C:\Users\me\AppData\Roaming\npm\node_modules\node-gyp\lib\find-visualstudio.js:74:16
gyp ERR! stack at VisualStudioFinder.findVisualStudio2013 (C:\Users\me\AppData\Roaming\npm\node_modules\node-gyp\lib\find-visualstudio.js:351:14)
gyp ERR! stack at C:\Users\me\AppData\Roaming\npm\node_modules\node-gyp\lib\find-visualstudio.js:70:14
gyp ERR! stack at C:\Users\me\AppData\Roaming\npm\node_modules\node-gyp\lib\find-visualstudio.js:384:20
gyp ERR! stack at C:\Users\me\AppData\Roaming\npm\node_modules\node-gyp\lib\util.js:54:7
gyp ERR! stack at C:\Users\me\AppData\Roaming\npm\node_modules\node-gyp\lib\util.js:33:16
gyp ERR! stack at ChildProcess.exithandler (child_process.js:310:5)
gyp ERR! stack at ChildProcess.emit (events.js:315:20)
gyp ERR! stack at maybeClose (internal/child_process.js:1021:16)
gyp ERR! System Windows_NT 10.0.18362
gyp ERR! command "C:\Apps\nodejs\node.exe" "C:\Users\me\AppData\Roaming\npm\node_modules\node-gyp\bin\node-gyp.js" "configure" "--msvs_version=2017"
gyp ERR! cwd D:\Desktop\myapp
gyp ERR! node -v v12.18.3
gyp ERR! node-gyp -v v7.1.0
gyp ERR! not ok
我尝试过的事情都无济于事
- 使用
Desktop Development Kit for C++
重新安装 VS 2017
- 重新安装节点和 npm
- 运行 Admin CMD、Admin PowerShell、Admin VC2017 Dev 命令提示中的相同命令
- 手动将 VCINSTALLDIR 环境变量设置为:
C:\Program Files (x86)\Microsoft Visual Studio17\Community\
- 运行
npm config set msvs_version 2017 --global
,然后 npm config get msvs_version
给我 2017
- 每一步都重启电脑
我每一步都遇到了与上述相同的错误。
进一步尝试
我已经核对了我的整个 nodejs 安装并重新开始,但问题仍然存在。我做了什么
- 删除了基于 this Whosebug answer.
的 nodejs
- 使用官方 nodejs 站点的 .msi 安装程序为 Windows v12.18.3 重新安装了 nodejs x64,允许安装程序安装额外的依赖项,例如 chocolatey
- 使用
electron-forge
创建了一个空白电子应用程序:像这样
me@me-PC0 D:\Desktop
$ npx create-electron-app myapp
√ Initializing Project Directory
√ Initializing Git Repository
√ Locating custom template: "base"
√ Copying Starter Files
√ Initializing NPM Module
√ Installing Template Dependencies
√ Installing NPM Dependencies
me@me-PC0 D:\Desktop
$ cd myapp
me@me-PC0 D:\Desktop\myapp
$ npm start
> myapp@1.0.0 start D:\Desktop\myapp
> electron-forge start
√ Checking your system
√ Locating Application
√ Preparing native dependencies
√ Launching Application
- npm 使用的已配置 VS 版本:
npm config set msvs_version 2017
和 npm config set msvs_version 2017 --global
该应用 运行 到此为止。那么...
- 安装依赖zeromq
$ npm install zeromq --save-prod
npm WARN deprecated request@2.88.2: request has been deprecated, see https://github.com/request/request/issues/3142
npm WARN deprecated har-validator@5.1.5: this library is no longer supported
npm WARN rm not removing D:\Desktop\myapp\node_modules\.bin\extract-zip.cmd as it wasn't installed by D:\Desktop\myapp\node_modules\extract-zip
npm WARN rm not removing D:\Desktop\myapp\node_modules\.bin\extract-zip as it wasn't installed by D:\Desktop\myapp\node_modules\extract-zip
npm WARN rm not removing D:\Desktop\myapp\node_modules\.bin\rimraf.cmd as it wasn't installed by D:\Desktop\myapp\node_modules\rimraf
npm WARN rm not removing D:\Desktop\myapp\node_modules\.bin\rimraf as it wasn't installed by D:\Desktop\myapp\node_modules\rimraf
npm WARN rm not removing D:\Desktop\myapp\node_modules\.bin\semver.cmd as it wasn't installed by D:\Desktop\myapp\node_modules\semver
npm WARN rm not removing D:\Desktop\myapp\node_modules\.bin\semver as it wasn't installed by D:\Desktop\myapp\node_modules\semver
> zeromq@6.0.0-beta.6 install D:\Desktop\myapp\node_modules\zeromq
> node-gyp-build
> core-js@3.6.5 postinstall D:\Desktop\myapp\node_modules\core-js
> node -e "try{require('./postinstall')}catch(e){}"
Thank you for using core-js ( https://github.com/zloirock/core-js ) for polyfilling JavaScript standard library!
The project needs your help! Please consider supporting of core-js on Open Collective or Patreon:
> https://opencollective.com/core-js
> https://www.patreon.com/zloirock
Also, the author of core-js ( https://github.com/zloirock ) is looking for a good job -)
npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: electron-installer-debian@^3.0.0 (node_modules\@electron-forge\maker-deb\node_modules\electron-installer-debian):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for electron-installer-debian@3.1.0: wanted {"os":"darwin,linux","arch":"any"} (current: {"os":"win32","arch":"x64"})
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: electron-installer-redhat@^3.2.0 (node_modules\@electron-forge\maker-rpm\node_modules\electron-installer-redhat):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for electron-installer-redhat@3.2.0: wanted {"os":"darwin,linux","arch":"any"} (current: {"os":"win32","arch":"x64"})
npm WARN myapp@1.0.0 No repository field.
+ zeromq@6.0.0-beta.6
added 50 packages from 7 contributors, removed 32 packages, updated 401 packages and audited 460 packages in 61.306s
32 packages are looking for funding
run `npm fund` for details
found 0 vulnerabilities
- 运行 electron-forge 构建 Windows 发行版。
$ npm run make
> myapp@1.0.0 make D:\Desktop\myapp
> electron-forge make
√ Checking your system
√ Resolving Forge Config
We need to package your application before we can make it
√ Preparing to Package Application for arch: x64
× Preparing native dependencies: 0 / 1
An unhandled error has occurred inside Forge:
Command failed with a non-zero return code (1):
D:\Desktop\myapp\node_modules\electron-rebuild\node_modules\.bin\node-gyp.cmd rebuild --target=10.1.0 --arch=x64 --dist-url=https://www.electronjs.org/headers --build-from-source
gyp ERR! find VS
gyp ERR! find VS msvs_version was set from command line or npm config
gyp ERR! find VS - looking for Visual Studio version 2017
gyp ERR! find VS VCINSTALLDIR not set, not running in VS Command Prompt
gyp ERR! find VS could not use PowerShell to find Visual Studio 2017 or newer
gyp ERR! find VS looking for Visual Studio 2015
gyp ERR! find VS - found in "C:\Program Files (x86)\Microsoft Visual Studio 14.0"
gyp ERR! find VS - could not find MSBuild in registry for this version
gyp ERR! find VS not looking for VS2013 as it is only supported up to Node.js 8
gyp ERR! find VS
gyp ERR! find VS valid versions for msvs_version:
gyp ERR! find VS
gyp ERR! find VS **************************************************************
gyp ERR! find VS You need to install the latest version of Visual Studio
gyp ERR! find VS including the "Desktop development with C++" workload.
gyp ERR! find VS For more information consult the documentation at:
gyp ERR! find VS https://github.com/nodejs/node-gyp#on-windows
gyp ERR! find VS **************************************************************
gyp ERR! find VS
gyp ERR! configure error
gyp ERR! stack Error: Could not find any Visual Studio installation to use
gyp ERR! stack at VisualStudioFinder.fail (D:\Desktop\myapp\node_modules\node-gyp\lib\find-visualstudio.js:121:47)
gyp ERR! stack at D:\Desktop\myapp\node_modules\node-gyp\lib\find-visualstudio.js:74:16
gyp ERR! stack at VisualStudioFinder.findVisualStudio2013 (D:\Desktop\myapp\node_modules\node-gyp\lib\find-visualstudio.js:351:14)
gyp ERR! stack at D:\Desktop\myapp\node_modules\node-gyp\lib\find-visualstudio.js:70:14
gyp ERR! stack at D:\Desktop\myapp\node_modules\node-gyp\lib\find-visualstudio.js:384:20
gyp ERR! stack at D:\Desktop\myapp\node_modules\node-gyp\lib\util.js:54:7
gyp ERR! stack at D:\Desktop\myapp\node_modules\node-gyp\lib\util.js:33:16
gyp ERR! stack at ChildProcess.exithandler (child_process.js:310:5)
gyp ERR! stack at ChildProcess.emit (events.js:315:20)
gyp ERR! stack at maybeClose (internal/child_process.js:1021:16)
gyp ERR! System Windows_NT 10.0.18362
gyp ERR! command "C:\Program Files\nodejs\node.exe" "D:\Desktop\myapp\node_modules\node-gyp\bin\node-gyp.js" "rebuild" "--target=10.1.0" "--arch=x64" "--dist-url=https://www.electronjs.org/headers" "--build-from-source"
gyp ERR! cwd C:\Users\me\AppData\Local\Temp\electron-packager\win32-x64\myapp-win32-x64\resources\app\node_modules\zeromq
gyp ERR! node -v v12.18.3
gyp ERR! node-gyp -v v7.1.0
gyp ERR! not ok
Error: Command failed with a non-zero return code (1):
D:\Desktop\myapp\node_modules\electron-rebuild\node_modules\.bin\node-gyp.cmd rebuild --target=10.1.0 --arch=x64 --dist-url=https://www.electronjs.org/headers --build-from-source
gyp ERR! find VS
gyp ERR! find VS msvs_version was set from command line or npm config
gyp ERR! find VS - looking for Visual Studio version 2017
gyp ERR! find VS VCINSTALLDIR not set, not running in VS Command Prompt
gyp ERR! find VS could not use PowerShell to find Visual Studio 2017 or newer
gyp ERR! find VS looking for Visual Studio 2015
gyp ERR! find VS - found in "C:\Program Files (x86)\Microsoft Visual Studio 14.0"
gyp ERR! find VS - could not find MSBuild in registry for this version
gyp ERR! find VS not looking for VS2013 as it is only supported up to Node.js 8
gyp ERR! find VS
gyp ERR! find VS valid versions for msvs_version:
gyp ERR! find VS
gyp ERR! find VS **************************************************************
gyp ERR! find VS You need to install the latest version of Visual Studio
gyp ERR! find VS including the "Desktop development with C++" workload.
gyp ERR! find VS For more information consult the documentation at:
gyp ERR! find VS https://github.com/nodejs/node-gyp#on-windows
gyp ERR! find VS **************************************************************
gyp ERR! find VS
gyp ERR! configure error
gyp ERR! stack Error: Could not find any Visual Studio installation to use
gyp ERR! stack at VisualStudioFinder.fail (D:\Desktop\myapp\node_modules\node-gyp\lib\find-visualstudio.js:121:47)
gyp ERR! stack at D:\Desktop\myapp\node_modules\node-gyp\lib\find-visualstudio.js:74:16
gyp ERR! stack at VisualStudioFinder.findVisualStudio2013 (D:\Desktop\myapp\node_modules\node-gyp\lib\find-visualstudio.js:351:14)
gyp ERR! stack at D:\Desktop\myapp\node_modules\node-gyp\lib\find-visualstudio.js:70:14
gyp ERR! stack at D:\Desktop\myapp\node_modules\node-gyp\lib\find-visualstudio.js:384:20
gyp ERR! stack at D:\Desktop\myapp\node_modules\node-gyp\lib\util.js:54:7
gyp ERR! stack at D:\Desktop\myapp\node_modules\node-gyp\lib\util.js:33:16
gyp ERR! stack at ChildProcess.exithandler (child_process.js:310:5)
gyp ERR! stack at ChildProcess.emit (events.js:315:20)
gyp ERR! stack at maybeClose (internal/child_process.js:1021:16)
gyp ERR! System Windows_NT 10.0.18362
gyp ERR! command "C:\Program Files\nodejs\node.exe" "D:\Desktop\myapp\node_modules\node-gyp\bin\node-gyp.js" "rebuild" "--target=10.1.0" "--arch=x64" "--dist-url=https://www.electronjs.org/headers" "--build-from-source"
gyp ERR! cwd C:\Users\me\AppData\Local\Temp\electron-packager\win32-x64\myapp-win32-x64\resources\app\node_modules\zeromq
gyp ERR! node -v v12.18.3
gyp ERR! node-gyp -v v7.1.0
gyp ERR! not ok
at ChildProcess.<anonymous> (D:\Desktop\myapp\node_modules\@malept\cross-spawn-promise\src\index.ts:155:16)
at ChildProcess.emit (events.js:315:20)
at ChildProcess.EventEmitter.emit (domain.js:483:12)
at ChildProcess.cp.emit (D:\Desktop\myapp\node_modules\cross-spawn\lib\enoent.js:34:29)
at maybeClose (internal/child_process.js:1021:16)
at Process.ChildProcess._handle.onexit (internal/child_process.js:286:5)
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! myapp@1.0.0 make: `electron-forge make`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the myapp@1.0.0 make script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! C:\Users\me\AppData\Roaming\npm-cache\_logs20-08-28T04_35_43_345Z-debug.log
- 已尝试通过手动设置
VCINSTALLDIR
环境变量来解决此问题
set VCINSTALLDIR=C:\Program Files (x86)\Microsoft Visual Studio17\Community\
- 然后运行再次电子锻造
D:\Desktop\myapp>npm run make
> myapp@1.0.0 make D:\Desktop\myapp
> electron-forge make
√ Checking your system
√ Resolving Forge Config
We need to package your application before we can make it
√ Preparing to Package Application for arch: x64
× Preparing native dependencies: 0 / 1
An unhandled error has occurred inside Forge:
Command failed with a non-zero return code (1):
D:\Desktop\myapp\node_modules\electron-rebuild\node_modules\.bin\node-gyp.cmd rebuild --target=10.1.0 --arch=x64 --dist-url=https://www.electronjs.org/headers --build-from-source
gyp ERR! find VS
gyp ERR! find VS msvs_version was set from command line or npm config
gyp ERR! find VS - looking for Visual Studio version 2017
gyp ERR! find VS running in VS Command Prompt, installation path is:
gyp ERR! find VS "C:\Program Files (x86)\Microsoft Visual Studio17"
gyp ERR! find VS - will only use this version
gyp ERR! find VS could not use PowerShell to find Visual Studio 2017 or newer
gyp ERR! find VS looking for Visual Studio 2015
gyp ERR! find VS - found in "C:\Program Files (x86)\Microsoft Visual Studio 14.0"
gyp ERR! find VS - could not find MSBuild in registry for this version
gyp ERR! find VS not looking for VS2013 as it is only supported up to Node.js 8
gyp ERR! find VS msvs_version does not match this VS Command Prompt or the
gyp ERR! find VS installation cannot be used.
gyp ERR! find VS
gyp ERR! find VS **************************************************************
gyp ERR! find VS You need to install the latest version of Visual Studio
gyp ERR! find VS including the "Desktop development with C++" workload.
gyp ERR! find VS For more information consult the documentation at:
gyp ERR! find VS https://github.com/nodejs/node-gyp#on-windows
gyp ERR! find VS **************************************************************
gyp ERR! find VS
gyp ERR! configure error
gyp ERR! stack Error: Could not find any Visual Studio installation to use
gyp ERR! stack at VisualStudioFinder.fail (D:\Desktop\myapp\node_modules\node-gyp\lib\find-visualstudio.js:121:47)
gyp ERR! stack at D:\Desktop\myapp\node_modules\node-gyp\lib\find-visualstudio.js:74:16
gyp ERR! stack at VisualStudioFinder.findVisualStudio2013 (D:\Desktop\myapp\node_modules\node-gyp\lib\find-visualstudio.js:351:14)
gyp ERR! stack at D:\Desktop\myapp\node_modules\node-gyp\lib\find-visualstudio.js:70:14
gyp ERR! stack at D:\Desktop\myapp\node_modules\node-gyp\lib\find-visualstudio.js:384:20
gyp ERR! stack at D:\Desktop\myapp\node_modules\node-gyp\lib\util.js:54:7
gyp ERR! stack at D:\Desktop\myapp\node_modules\node-gyp\lib\util.js:33:16
gyp ERR! stack at ChildProcess.exithandler (child_process.js:310:5)
gyp ERR! stack at ChildProcess.emit (events.js:315:20)
gyp ERR! stack at maybeClose (internal/child_process.js:1021:16)
gyp ERR! System Windows_NT 10.0.18362
gyp ERR! command "C:\Program Files\nodejs\node.exe" "D:\Desktop\myapp\node_modules\node-gyp\bin\node-gyp.js" "rebuild" "--target=10.1.0" "--arch=x64" "--dist-url=https://www.electronjs.org/headers" "--build-from-source"
gyp ERR! cwd C:\Users\me\AppData\Local\Temp\electron-packager\win32-x64\myapp-win32-x64\resources\app\node_modules\zeromq
gyp ERR! node -v v12.18.3
gyp ERR! node-gyp -v v7.1.0
gyp ERR! not ok
Error: Command failed with a non-zero return code (1):
D:\Desktop\myapp\node_modules\electron-rebuild\node_modules\.bin\node-gyp.cmd rebuild --target=10.1.0 --arch=x64 --dist-url=https://www.electronjs.org/headers --build-from-source
gyp ERR! find VS
gyp ERR! find VS msvs_version was set from command line or npm config
gyp ERR! find VS - looking for Visual Studio version 2017
gyp ERR! find VS running in VS Command Prompt, installation path is:
gyp ERR! find VS "C:\Program Files (x86)\Microsoft Visual Studio17"
gyp ERR! find VS - will only use this version
gyp ERR! find VS could not use PowerShell to find Visual Studio 2017 or newer
gyp ERR! find VS looking for Visual Studio 2015
gyp ERR! find VS - found in "C:\Program Files (x86)\Microsoft Visual Studio 14.0"
gyp ERR! find VS - could not find MSBuild in registry for this version
gyp ERR! find VS not looking for VS2013 as it is only supported up to Node.js 8
gyp ERR! find VS msvs_version does not match this VS Command Prompt or the
gyp ERR! find VS installation cannot be used.
gyp ERR! find VS
gyp ERR! find VS **************************************************************
gyp ERR! find VS You need to install the latest version of Visual Studio
gyp ERR! find VS including the "Desktop development with C++" workload.
gyp ERR! find VS For more information consult the documentation at:
gyp ERR! find VS https://github.com/nodejs/node-gyp#on-windows
gyp ERR! find VS **************************************************************
gyp ERR! find VS
gyp ERR! configure error
gyp ERR! stack Error: Could not find any Visual Studio installation to use
gyp ERR! stack at VisualStudioFinder.fail (D:\Desktop\myapp\node_modules\node-gyp\lib\find-visualstudio.js:121:47)
gyp ERR! stack at D:\Desktop\myapp\node_modules\node-gyp\lib\find-visualstudio.js:74:16
gyp ERR! stack at VisualStudioFinder.findVisualStudio2013 (D:\Desktop\myapp\node_modules\node-gyp\lib\find-visualstudio.js:351:14)
gyp ERR! stack at D:\Desktop\myapp\node_modules\node-gyp\lib\find-visualstudio.js:70:14
gyp ERR! stack at D:\Desktop\myapp\node_modules\node-gyp\lib\find-visualstudio.js:384:20
gyp ERR! stack at D:\Desktop\myapp\node_modules\node-gyp\lib\util.js:54:7
gyp ERR! stack at D:\Desktop\myapp\node_modules\node-gyp\lib\util.js:33:16
gyp ERR! stack at ChildProcess.exithandler (child_process.js:310:5)
gyp ERR! stack at ChildProcess.emit (events.js:315:20)
gyp ERR! stack at maybeClose (internal/child_process.js:1021:16)
gyp ERR! System Windows_NT 10.0.18362
gyp ERR! command "C:\Program Files\nodejs\node.exe" "D:\Desktop\myapp\node_modules\node-gyp\bin\node-gyp.js" "rebuild" "--target=10.1.0" "--arch=x64" "--dist-url=https://www.electronjs.org/headers" "--build-from-source"
gyp ERR! cwd C:\Users\me\AppData\Local\Temp\electron-packager\win32-x64\myapp-win32-x64\resources\app\node_modules\zeromq
gyp ERR! node -v v12.18.3
gyp ERR! node-gyp -v v7.1.0
gyp ERR! not ok
at ChildProcess.<anonymous> (D:\Desktop\myapp\node_modules\@malept\cross-spawn-promise\src\index.ts:155:16)
at ChildProcess.emit (events.js:315:20)
at ChildProcess.EventEmitter.emit (domain.js:483:12)
at ChildProcess.cp.emit (D:\Desktop\myapp\node_modules\cross-spawn\lib\enoent.js:34:29)
at maybeClose (internal/child_process.js:1021:16)
at Process.ChildProcess._handle.onexit (internal/child_process.js:286:5)
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! myapp@1.0.0 make: `electron-forge make`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the myapp@1.0.0 make script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! C:\Users\me\AppData\Roaming\npm-cache\_logs20-08-28T04_40_16_364Z-debug.log
- 还试图在
D:\Desktop\myapp\node_modules\node-gyp\lib\find-visualstudio.js
处破解 node-gyp 的 visual studio 定位器代码以将 amd64
插入行
if (versionYear === 2017) {
return path.join(info.path, 'MSBuild', '15.0', 'Bin', 'MSBuild.exe')
}
if (versionYear === 2019) {
return path.join(info.path, 'MSBuild', 'Current', 'Bin', 'MSBuild.exe')
}
让他们成为
if (versionYear === 2017) {
return path.join(info.path, 'MSBuild', '15.0', 'Bin', 'amd64', 'MSBuild.exe')
}
if (versionYear === 2019) {
return path.join(info.path, 'MSBuild', 'Current', 'Bin', 'amd64', 'MSBuild.exe')
}
- 然后 运行 再
npm run make
。与上一步相同的错误。
这是我的构建环境
D:\Desktop\myapp>npm config get msvs_version
2017
D:\Desktop\myapp>npm config get python
C:\Python\Python38\pythonw.exe
Python 3.8 是来自 python.org 的 64 位版本。
问题
我错过了什么?我应该忘记 VS2017 吗?我的项目使用 VS2017 进行 C++ 开发,所以恐怕我无法更改它。但是我应该安装VS2015吗?
令人困惑的是,在 node-gyp README.md
上,它首先说
Launch cmd, npm config set msvs_version 2017
然后在 How to Use
中,它接着说:
Auto-detection fails for Visual C++ Build Tools 2015, so --msvs_version=2015 needs to be added (not needed when run by npm as configured above):
$ node-gyp configure --msvs_version=2015
这个版本有什么差异?
尝试使用 windows-build-tools
npm 包:https://www.npmjs.com/package/windows-build-tools。这是一个专门设计用于为 Windows.
上的本机构建设置环境的软件包
你只需要全局安装它:
npm install --global windows-build-tools
考虑到您现有的所有配置,这不能保证工作,但在一个干净的系统上,仅此一项就足以获得一个工作的构建环境。如果您仍然遇到问题,他们的 Github 问题跟踪器和自述文件 (https://github.com/felixrieseberg/windows-build-tools) 有很多建议。祝你好运!
终于自己想通了。
罪魁祸首
Visual Studio 环境变量 LIB
在我的本地机器上被污染了。那里的某些路径中有一些非法字符,导致 node-gyp
解析问题。这些字符修复后,问题就消失了。
此外,我在问题中提到的 node-gyp
源中的 64 位修复是必要的:
// D:\Desktop\myapp\node_modules\node-gyp\lib\find-visualstudio.js
if (versionYear === 2017) {
return path.join(info.path, 'MSBuild', '15.0', 'Bin', 'amd64', 'MSBuild.exe')
}
if (versionYear === 2019) {
return path.join(info.path, 'MSBuild', 'Current', 'Bin', 'amd64', 'MSBuild.exe')
}
我是怎么找到它的
我真的不得不进入 node-gyp
源代码来定位问题。它定位 Visual Studio 安装的方式是通过 PowerShell 命令调用另一个执行 OS 查询作业的 C# 脚本 Find-VisualStudio.cs
。
不幸的是,此 PowerShell 命令的错误日志未反映在即时 node-gyp
或 npm
日志中。 在我将命令拉出并运行 它在 PowerShell 中,瞧! PowerShell 命令 运行 的底层系统日志说我的 LIB
变量有问题。
道德课
- 经验法则:保持 Visual Studio 环境变量不变。
- JS/node 生态系统具有复杂的依赖关系。您必须亲自动手查看源代码才能了解发生了什么。
- 考虑到生态系统的绝对速度,过时的提示实际上可能会让您偏离正确的轨道,而“过时”可能意味着半年或几个月之前。
简介
在线咨询了数百万条提示后,包括
- How can I solve error gypgyp ERR!ERR! find VSfind VS msvs_version not set from command line or npm config?
- https://github.com/nodejs/node-gyp/issues/1663
- Not looking for VS2013 npm install node modules
和this "comprehensive guide"介绍了与官方文档相悖的想法
我仍然无法安装某些需要通过 npm 或 yarn 进行本地构建的第三方软件包。我也没有收到来自 nodejs
或 node-gyp
github 问题论坛的任何回复。
我即将发布一个已经在 macOS 上使用 electron-forge
构建良好的应用程序,但无法在 Windows.
主要问题是 npm
用于构建第三方包的依赖项之一 node-gyp
在我的机器上找不到 Visual Studio。我使用 VS2017 Community 并安装了 node-gyp
.
我的设置
- 节点版本:
node -v
=v12.18.3 和npm -v
=6.14.8 - 平台:
systeminfo | findstr /B /C:"OS Name" /C:"OS Version" /C:"System Type"
(Windows)
OS Name: Microsoft Windows 10 Pro
OS Version: 10.0.18362 N/A Build 18362
System Type: x64-based PC
- 编译器:
msbuild /version & cl
(Windows)
Microsoft (R) Build Engine version 15.9.21+g9802d43bc3 for .NET Framework
Copyright (C) Microsoft Corporation. All rights reserved.
15.9.21.664Microsoft (R) C/C++ Optimizing Compiler Version 19.16.27043 for x64
Copyright (C) Microsoft Corporation. All rights reserved.
usage: cl [ option... ] filename... [ /link linkoption... ]
- 模块:zeromq
详细输出(来自 npm 或 node-gyp):
me@me-PC0 D:\Desktop\myapp
# node-gyp configure --msvs_version=2017
gyp info it worked if it ends with ok
gyp info using node-gyp@7.1.0
gyp info using node@12.18.3 | win32 | x64
gyp info find Python using Python version 3.8.5 found at "C:\Python\Python38\python.exe"
gyp ERR! find VS
gyp ERR! find VS msvs_version was set from command line or npm config
gyp ERR! find VS - looking for Visual Studio version 2017
gyp ERR! find VS running in VS Command Prompt, installation path is:
gyp ERR! find VS "C:\Program Files (x86)\Microsoft Visual Studio17"
gyp ERR! find VS - will only use this version
gyp ERR! find VS could not use PowerShell to find Visual Studio 2017 or newer
gyp ERR! find VS looking for Visual Studio 2015
gyp ERR! find VS - found in "C:\Program Files (x86)\Microsoft Visual Studio 14.0"
gyp ERR! find VS - could not find MSBuild in registry for this version
gyp ERR! find VS not looking for VS2013 as it is only supported up to Node.js 8
gyp ERR! find VS msvs_version does not match this VS Command Prompt or the
gyp ERR! find VS installation cannot be used.
gyp ERR! find VS
gyp ERR! find VS **************************************************************
gyp ERR! find VS You need to install the latest version of Visual Studio
gyp ERR! find VS including the "Desktop development with C++" workload.
gyp ERR! find VS For more information consult the documentation at:
gyp ERR! find VS https://github.com/nodejs/node-gyp#on-windows
gyp ERR! find VS **************************************************************
gyp ERR! find VS
gyp ERR! configure error
gyp ERR! stack Error: Could not find any Visual Studio installation to use
gyp ERR! stack at VisualStudioFinder.fail (C:\Users\me\AppData\Roaming\npm\node_modules\node-gyp\lib\find-visualstudio.js:121:47)
gyp ERR! stack at C:\Users\me\AppData\Roaming\npm\node_modules\node-gyp\lib\find-visualstudio.js:74:16
gyp ERR! stack at VisualStudioFinder.findVisualStudio2013 (C:\Users\me\AppData\Roaming\npm\node_modules\node-gyp\lib\find-visualstudio.js:351:14)
gyp ERR! stack at C:\Users\me\AppData\Roaming\npm\node_modules\node-gyp\lib\find-visualstudio.js:70:14
gyp ERR! stack at C:\Users\me\AppData\Roaming\npm\node_modules\node-gyp\lib\find-visualstudio.js:384:20
gyp ERR! stack at C:\Users\me\AppData\Roaming\npm\node_modules\node-gyp\lib\util.js:54:7
gyp ERR! stack at C:\Users\me\AppData\Roaming\npm\node_modules\node-gyp\lib\util.js:33:16
gyp ERR! stack at ChildProcess.exithandler (child_process.js:310:5)
gyp ERR! stack at ChildProcess.emit (events.js:315:20)
gyp ERR! stack at maybeClose (internal/child_process.js:1021:16)
gyp ERR! System Windows_NT 10.0.18362
gyp ERR! command "C:\Apps\nodejs\node.exe" "C:\Users\me\AppData\Roaming\npm\node_modules\node-gyp\bin\node-gyp.js" "configure" "--msvs_version=2017"
gyp ERR! cwd D:\Desktop\myapp
gyp ERR! node -v v12.18.3
gyp ERR! node-gyp -v v7.1.0
gyp ERR! not ok
我尝试过的事情都无济于事
- 使用
Desktop Development Kit for C++
重新安装 VS 2017
- 重新安装节点和 npm
- 运行 Admin CMD、Admin PowerShell、Admin VC2017 Dev 命令提示中的相同命令
- 手动将 VCINSTALLDIR 环境变量设置为:
C:\Program Files (x86)\Microsoft Visual Studio17\Community\
- 运行
npm config set msvs_version 2017 --global
,然后npm config get msvs_version
给我 2017 - 每一步都重启电脑
我每一步都遇到了与上述相同的错误。
进一步尝试
我已经核对了我的整个 nodejs 安装并重新开始,但问题仍然存在。我做了什么
- 删除了基于 this Whosebug answer. 的 nodejs
- 使用官方 nodejs 站点的 .msi 安装程序为 Windows v12.18.3 重新安装了 nodejs x64,允许安装程序安装额外的依赖项,例如 chocolatey
- 使用
electron-forge
创建了一个空白电子应用程序:像这样
me@me-PC0 D:\Desktop
$ npx create-electron-app myapp
√ Initializing Project Directory
√ Initializing Git Repository
√ Locating custom template: "base"
√ Copying Starter Files
√ Initializing NPM Module
√ Installing Template Dependencies
√ Installing NPM Dependencies
me@me-PC0 D:\Desktop
$ cd myapp
me@me-PC0 D:\Desktop\myapp
$ npm start
> myapp@1.0.0 start D:\Desktop\myapp
> electron-forge start
√ Checking your system
√ Locating Application
√ Preparing native dependencies
√ Launching Application
- npm 使用的已配置 VS 版本:
npm config set msvs_version 2017
和npm config set msvs_version 2017 --global
该应用 运行 到此为止。那么...
- 安装依赖zeromq
$ npm install zeromq --save-prod
npm WARN deprecated request@2.88.2: request has been deprecated, see https://github.com/request/request/issues/3142
npm WARN deprecated har-validator@5.1.5: this library is no longer supported
npm WARN rm not removing D:\Desktop\myapp\node_modules\.bin\extract-zip.cmd as it wasn't installed by D:\Desktop\myapp\node_modules\extract-zip
npm WARN rm not removing D:\Desktop\myapp\node_modules\.bin\extract-zip as it wasn't installed by D:\Desktop\myapp\node_modules\extract-zip
npm WARN rm not removing D:\Desktop\myapp\node_modules\.bin\rimraf.cmd as it wasn't installed by D:\Desktop\myapp\node_modules\rimraf
npm WARN rm not removing D:\Desktop\myapp\node_modules\.bin\rimraf as it wasn't installed by D:\Desktop\myapp\node_modules\rimraf
npm WARN rm not removing D:\Desktop\myapp\node_modules\.bin\semver.cmd as it wasn't installed by D:\Desktop\myapp\node_modules\semver
npm WARN rm not removing D:\Desktop\myapp\node_modules\.bin\semver as it wasn't installed by D:\Desktop\myapp\node_modules\semver
> zeromq@6.0.0-beta.6 install D:\Desktop\myapp\node_modules\zeromq
> node-gyp-build
> core-js@3.6.5 postinstall D:\Desktop\myapp\node_modules\core-js
> node -e "try{require('./postinstall')}catch(e){}"
Thank you for using core-js ( https://github.com/zloirock/core-js ) for polyfilling JavaScript standard library!
The project needs your help! Please consider supporting of core-js on Open Collective or Patreon:
> https://opencollective.com/core-js
> https://www.patreon.com/zloirock
Also, the author of core-js ( https://github.com/zloirock ) is looking for a good job -)
npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: electron-installer-debian@^3.0.0 (node_modules\@electron-forge\maker-deb\node_modules\electron-installer-debian):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for electron-installer-debian@3.1.0: wanted {"os":"darwin,linux","arch":"any"} (current: {"os":"win32","arch":"x64"})
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: electron-installer-redhat@^3.2.0 (node_modules\@electron-forge\maker-rpm\node_modules\electron-installer-redhat):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for electron-installer-redhat@3.2.0: wanted {"os":"darwin,linux","arch":"any"} (current: {"os":"win32","arch":"x64"})
npm WARN myapp@1.0.0 No repository field.
+ zeromq@6.0.0-beta.6
added 50 packages from 7 contributors, removed 32 packages, updated 401 packages and audited 460 packages in 61.306s
32 packages are looking for funding
run `npm fund` for details
found 0 vulnerabilities
- 运行 electron-forge 构建 Windows 发行版。
$ npm run make
> myapp@1.0.0 make D:\Desktop\myapp
> electron-forge make
√ Checking your system
√ Resolving Forge Config
We need to package your application before we can make it
√ Preparing to Package Application for arch: x64
× Preparing native dependencies: 0 / 1
An unhandled error has occurred inside Forge:
Command failed with a non-zero return code (1):
D:\Desktop\myapp\node_modules\electron-rebuild\node_modules\.bin\node-gyp.cmd rebuild --target=10.1.0 --arch=x64 --dist-url=https://www.electronjs.org/headers --build-from-source
gyp ERR! find VS
gyp ERR! find VS msvs_version was set from command line or npm config
gyp ERR! find VS - looking for Visual Studio version 2017
gyp ERR! find VS VCINSTALLDIR not set, not running in VS Command Prompt
gyp ERR! find VS could not use PowerShell to find Visual Studio 2017 or newer
gyp ERR! find VS looking for Visual Studio 2015
gyp ERR! find VS - found in "C:\Program Files (x86)\Microsoft Visual Studio 14.0"
gyp ERR! find VS - could not find MSBuild in registry for this version
gyp ERR! find VS not looking for VS2013 as it is only supported up to Node.js 8
gyp ERR! find VS
gyp ERR! find VS valid versions for msvs_version:
gyp ERR! find VS
gyp ERR! find VS **************************************************************
gyp ERR! find VS You need to install the latest version of Visual Studio
gyp ERR! find VS including the "Desktop development with C++" workload.
gyp ERR! find VS For more information consult the documentation at:
gyp ERR! find VS https://github.com/nodejs/node-gyp#on-windows
gyp ERR! find VS **************************************************************
gyp ERR! find VS
gyp ERR! configure error
gyp ERR! stack Error: Could not find any Visual Studio installation to use
gyp ERR! stack at VisualStudioFinder.fail (D:\Desktop\myapp\node_modules\node-gyp\lib\find-visualstudio.js:121:47)
gyp ERR! stack at D:\Desktop\myapp\node_modules\node-gyp\lib\find-visualstudio.js:74:16
gyp ERR! stack at VisualStudioFinder.findVisualStudio2013 (D:\Desktop\myapp\node_modules\node-gyp\lib\find-visualstudio.js:351:14)
gyp ERR! stack at D:\Desktop\myapp\node_modules\node-gyp\lib\find-visualstudio.js:70:14
gyp ERR! stack at D:\Desktop\myapp\node_modules\node-gyp\lib\find-visualstudio.js:384:20
gyp ERR! stack at D:\Desktop\myapp\node_modules\node-gyp\lib\util.js:54:7
gyp ERR! stack at D:\Desktop\myapp\node_modules\node-gyp\lib\util.js:33:16
gyp ERR! stack at ChildProcess.exithandler (child_process.js:310:5)
gyp ERR! stack at ChildProcess.emit (events.js:315:20)
gyp ERR! stack at maybeClose (internal/child_process.js:1021:16)
gyp ERR! System Windows_NT 10.0.18362
gyp ERR! command "C:\Program Files\nodejs\node.exe" "D:\Desktop\myapp\node_modules\node-gyp\bin\node-gyp.js" "rebuild" "--target=10.1.0" "--arch=x64" "--dist-url=https://www.electronjs.org/headers" "--build-from-source"
gyp ERR! cwd C:\Users\me\AppData\Local\Temp\electron-packager\win32-x64\myapp-win32-x64\resources\app\node_modules\zeromq
gyp ERR! node -v v12.18.3
gyp ERR! node-gyp -v v7.1.0
gyp ERR! not ok
Error: Command failed with a non-zero return code (1):
D:\Desktop\myapp\node_modules\electron-rebuild\node_modules\.bin\node-gyp.cmd rebuild --target=10.1.0 --arch=x64 --dist-url=https://www.electronjs.org/headers --build-from-source
gyp ERR! find VS
gyp ERR! find VS msvs_version was set from command line or npm config
gyp ERR! find VS - looking for Visual Studio version 2017
gyp ERR! find VS VCINSTALLDIR not set, not running in VS Command Prompt
gyp ERR! find VS could not use PowerShell to find Visual Studio 2017 or newer
gyp ERR! find VS looking for Visual Studio 2015
gyp ERR! find VS - found in "C:\Program Files (x86)\Microsoft Visual Studio 14.0"
gyp ERR! find VS - could not find MSBuild in registry for this version
gyp ERR! find VS not looking for VS2013 as it is only supported up to Node.js 8
gyp ERR! find VS
gyp ERR! find VS valid versions for msvs_version:
gyp ERR! find VS
gyp ERR! find VS **************************************************************
gyp ERR! find VS You need to install the latest version of Visual Studio
gyp ERR! find VS including the "Desktop development with C++" workload.
gyp ERR! find VS For more information consult the documentation at:
gyp ERR! find VS https://github.com/nodejs/node-gyp#on-windows
gyp ERR! find VS **************************************************************
gyp ERR! find VS
gyp ERR! configure error
gyp ERR! stack Error: Could not find any Visual Studio installation to use
gyp ERR! stack at VisualStudioFinder.fail (D:\Desktop\myapp\node_modules\node-gyp\lib\find-visualstudio.js:121:47)
gyp ERR! stack at D:\Desktop\myapp\node_modules\node-gyp\lib\find-visualstudio.js:74:16
gyp ERR! stack at VisualStudioFinder.findVisualStudio2013 (D:\Desktop\myapp\node_modules\node-gyp\lib\find-visualstudio.js:351:14)
gyp ERR! stack at D:\Desktop\myapp\node_modules\node-gyp\lib\find-visualstudio.js:70:14
gyp ERR! stack at D:\Desktop\myapp\node_modules\node-gyp\lib\find-visualstudio.js:384:20
gyp ERR! stack at D:\Desktop\myapp\node_modules\node-gyp\lib\util.js:54:7
gyp ERR! stack at D:\Desktop\myapp\node_modules\node-gyp\lib\util.js:33:16
gyp ERR! stack at ChildProcess.exithandler (child_process.js:310:5)
gyp ERR! stack at ChildProcess.emit (events.js:315:20)
gyp ERR! stack at maybeClose (internal/child_process.js:1021:16)
gyp ERR! System Windows_NT 10.0.18362
gyp ERR! command "C:\Program Files\nodejs\node.exe" "D:\Desktop\myapp\node_modules\node-gyp\bin\node-gyp.js" "rebuild" "--target=10.1.0" "--arch=x64" "--dist-url=https://www.electronjs.org/headers" "--build-from-source"
gyp ERR! cwd C:\Users\me\AppData\Local\Temp\electron-packager\win32-x64\myapp-win32-x64\resources\app\node_modules\zeromq
gyp ERR! node -v v12.18.3
gyp ERR! node-gyp -v v7.1.0
gyp ERR! not ok
at ChildProcess.<anonymous> (D:\Desktop\myapp\node_modules\@malept\cross-spawn-promise\src\index.ts:155:16)
at ChildProcess.emit (events.js:315:20)
at ChildProcess.EventEmitter.emit (domain.js:483:12)
at ChildProcess.cp.emit (D:\Desktop\myapp\node_modules\cross-spawn\lib\enoent.js:34:29)
at maybeClose (internal/child_process.js:1021:16)
at Process.ChildProcess._handle.onexit (internal/child_process.js:286:5)
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! myapp@1.0.0 make: `electron-forge make`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the myapp@1.0.0 make script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! C:\Users\me\AppData\Roaming\npm-cache\_logs20-08-28T04_35_43_345Z-debug.log
- 已尝试通过手动设置
VCINSTALLDIR
环境变量来解决此问题
set VCINSTALLDIR=C:\Program Files (x86)\Microsoft Visual Studio17\Community\
- 然后运行再次电子锻造
D:\Desktop\myapp>npm run make
> myapp@1.0.0 make D:\Desktop\myapp
> electron-forge make
√ Checking your system
√ Resolving Forge Config
We need to package your application before we can make it
√ Preparing to Package Application for arch: x64
× Preparing native dependencies: 0 / 1
An unhandled error has occurred inside Forge:
Command failed with a non-zero return code (1):
D:\Desktop\myapp\node_modules\electron-rebuild\node_modules\.bin\node-gyp.cmd rebuild --target=10.1.0 --arch=x64 --dist-url=https://www.electronjs.org/headers --build-from-source
gyp ERR! find VS
gyp ERR! find VS msvs_version was set from command line or npm config
gyp ERR! find VS - looking for Visual Studio version 2017
gyp ERR! find VS running in VS Command Prompt, installation path is:
gyp ERR! find VS "C:\Program Files (x86)\Microsoft Visual Studio17"
gyp ERR! find VS - will only use this version
gyp ERR! find VS could not use PowerShell to find Visual Studio 2017 or newer
gyp ERR! find VS looking for Visual Studio 2015
gyp ERR! find VS - found in "C:\Program Files (x86)\Microsoft Visual Studio 14.0"
gyp ERR! find VS - could not find MSBuild in registry for this version
gyp ERR! find VS not looking for VS2013 as it is only supported up to Node.js 8
gyp ERR! find VS msvs_version does not match this VS Command Prompt or the
gyp ERR! find VS installation cannot be used.
gyp ERR! find VS
gyp ERR! find VS **************************************************************
gyp ERR! find VS You need to install the latest version of Visual Studio
gyp ERR! find VS including the "Desktop development with C++" workload.
gyp ERR! find VS For more information consult the documentation at:
gyp ERR! find VS https://github.com/nodejs/node-gyp#on-windows
gyp ERR! find VS **************************************************************
gyp ERR! find VS
gyp ERR! configure error
gyp ERR! stack Error: Could not find any Visual Studio installation to use
gyp ERR! stack at VisualStudioFinder.fail (D:\Desktop\myapp\node_modules\node-gyp\lib\find-visualstudio.js:121:47)
gyp ERR! stack at D:\Desktop\myapp\node_modules\node-gyp\lib\find-visualstudio.js:74:16
gyp ERR! stack at VisualStudioFinder.findVisualStudio2013 (D:\Desktop\myapp\node_modules\node-gyp\lib\find-visualstudio.js:351:14)
gyp ERR! stack at D:\Desktop\myapp\node_modules\node-gyp\lib\find-visualstudio.js:70:14
gyp ERR! stack at D:\Desktop\myapp\node_modules\node-gyp\lib\find-visualstudio.js:384:20
gyp ERR! stack at D:\Desktop\myapp\node_modules\node-gyp\lib\util.js:54:7
gyp ERR! stack at D:\Desktop\myapp\node_modules\node-gyp\lib\util.js:33:16
gyp ERR! stack at ChildProcess.exithandler (child_process.js:310:5)
gyp ERR! stack at ChildProcess.emit (events.js:315:20)
gyp ERR! stack at maybeClose (internal/child_process.js:1021:16)
gyp ERR! System Windows_NT 10.0.18362
gyp ERR! command "C:\Program Files\nodejs\node.exe" "D:\Desktop\myapp\node_modules\node-gyp\bin\node-gyp.js" "rebuild" "--target=10.1.0" "--arch=x64" "--dist-url=https://www.electronjs.org/headers" "--build-from-source"
gyp ERR! cwd C:\Users\me\AppData\Local\Temp\electron-packager\win32-x64\myapp-win32-x64\resources\app\node_modules\zeromq
gyp ERR! node -v v12.18.3
gyp ERR! node-gyp -v v7.1.0
gyp ERR! not ok
Error: Command failed with a non-zero return code (1):
D:\Desktop\myapp\node_modules\electron-rebuild\node_modules\.bin\node-gyp.cmd rebuild --target=10.1.0 --arch=x64 --dist-url=https://www.electronjs.org/headers --build-from-source
gyp ERR! find VS
gyp ERR! find VS msvs_version was set from command line or npm config
gyp ERR! find VS - looking for Visual Studio version 2017
gyp ERR! find VS running in VS Command Prompt, installation path is:
gyp ERR! find VS "C:\Program Files (x86)\Microsoft Visual Studio17"
gyp ERR! find VS - will only use this version
gyp ERR! find VS could not use PowerShell to find Visual Studio 2017 or newer
gyp ERR! find VS looking for Visual Studio 2015
gyp ERR! find VS - found in "C:\Program Files (x86)\Microsoft Visual Studio 14.0"
gyp ERR! find VS - could not find MSBuild in registry for this version
gyp ERR! find VS not looking for VS2013 as it is only supported up to Node.js 8
gyp ERR! find VS msvs_version does not match this VS Command Prompt or the
gyp ERR! find VS installation cannot be used.
gyp ERR! find VS
gyp ERR! find VS **************************************************************
gyp ERR! find VS You need to install the latest version of Visual Studio
gyp ERR! find VS including the "Desktop development with C++" workload.
gyp ERR! find VS For more information consult the documentation at:
gyp ERR! find VS https://github.com/nodejs/node-gyp#on-windows
gyp ERR! find VS **************************************************************
gyp ERR! find VS
gyp ERR! configure error
gyp ERR! stack Error: Could not find any Visual Studio installation to use
gyp ERR! stack at VisualStudioFinder.fail (D:\Desktop\myapp\node_modules\node-gyp\lib\find-visualstudio.js:121:47)
gyp ERR! stack at D:\Desktop\myapp\node_modules\node-gyp\lib\find-visualstudio.js:74:16
gyp ERR! stack at VisualStudioFinder.findVisualStudio2013 (D:\Desktop\myapp\node_modules\node-gyp\lib\find-visualstudio.js:351:14)
gyp ERR! stack at D:\Desktop\myapp\node_modules\node-gyp\lib\find-visualstudio.js:70:14
gyp ERR! stack at D:\Desktop\myapp\node_modules\node-gyp\lib\find-visualstudio.js:384:20
gyp ERR! stack at D:\Desktop\myapp\node_modules\node-gyp\lib\util.js:54:7
gyp ERR! stack at D:\Desktop\myapp\node_modules\node-gyp\lib\util.js:33:16
gyp ERR! stack at ChildProcess.exithandler (child_process.js:310:5)
gyp ERR! stack at ChildProcess.emit (events.js:315:20)
gyp ERR! stack at maybeClose (internal/child_process.js:1021:16)
gyp ERR! System Windows_NT 10.0.18362
gyp ERR! command "C:\Program Files\nodejs\node.exe" "D:\Desktop\myapp\node_modules\node-gyp\bin\node-gyp.js" "rebuild" "--target=10.1.0" "--arch=x64" "--dist-url=https://www.electronjs.org/headers" "--build-from-source"
gyp ERR! cwd C:\Users\me\AppData\Local\Temp\electron-packager\win32-x64\myapp-win32-x64\resources\app\node_modules\zeromq
gyp ERR! node -v v12.18.3
gyp ERR! node-gyp -v v7.1.0
gyp ERR! not ok
at ChildProcess.<anonymous> (D:\Desktop\myapp\node_modules\@malept\cross-spawn-promise\src\index.ts:155:16)
at ChildProcess.emit (events.js:315:20)
at ChildProcess.EventEmitter.emit (domain.js:483:12)
at ChildProcess.cp.emit (D:\Desktop\myapp\node_modules\cross-spawn\lib\enoent.js:34:29)
at maybeClose (internal/child_process.js:1021:16)
at Process.ChildProcess._handle.onexit (internal/child_process.js:286:5)
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! myapp@1.0.0 make: `electron-forge make`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the myapp@1.0.0 make script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! C:\Users\me\AppData\Roaming\npm-cache\_logs20-08-28T04_40_16_364Z-debug.log
- 还试图在
D:\Desktop\myapp\node_modules\node-gyp\lib\find-visualstudio.js
处破解 node-gyp 的 visual studio 定位器代码以将amd64
插入行
if (versionYear === 2017) {
return path.join(info.path, 'MSBuild', '15.0', 'Bin', 'MSBuild.exe')
}
if (versionYear === 2019) {
return path.join(info.path, 'MSBuild', 'Current', 'Bin', 'MSBuild.exe')
}
让他们成为
if (versionYear === 2017) {
return path.join(info.path, 'MSBuild', '15.0', 'Bin', 'amd64', 'MSBuild.exe')
}
if (versionYear === 2019) {
return path.join(info.path, 'MSBuild', 'Current', 'Bin', 'amd64', 'MSBuild.exe')
}
- 然后 运行 再
npm run make
。与上一步相同的错误。
这是我的构建环境
D:\Desktop\myapp>npm config get msvs_version
2017
D:\Desktop\myapp>npm config get python
C:\Python\Python38\pythonw.exe
Python 3.8 是来自 python.org 的 64 位版本。
问题
我错过了什么?我应该忘记 VS2017 吗?我的项目使用 VS2017 进行 C++ 开发,所以恐怕我无法更改它。但是我应该安装VS2015吗?
令人困惑的是,在 node-gyp README.md
上,它首先说
Launch cmd,
npm config set msvs_version 2017
然后在 How to Use
中,它接着说:
Auto-detection fails for Visual C++ Build Tools 2015, so --msvs_version=2015 needs to be added (not needed when run by npm as configured above):
$ node-gyp configure --msvs_version=2015
这个版本有什么差异?
尝试使用 windows-build-tools
npm 包:https://www.npmjs.com/package/windows-build-tools。这是一个专门设计用于为 Windows.
你只需要全局安装它:
npm install --global windows-build-tools
考虑到您现有的所有配置,这不能保证工作,但在一个干净的系统上,仅此一项就足以获得一个工作的构建环境。如果您仍然遇到问题,他们的 Github 问题跟踪器和自述文件 (https://github.com/felixrieseberg/windows-build-tools) 有很多建议。祝你好运!
终于自己想通了。
罪魁祸首
Visual Studio 环境变量 LIB
在我的本地机器上被污染了。那里的某些路径中有一些非法字符,导致 node-gyp
解析问题。这些字符修复后,问题就消失了。
此外,我在问题中提到的 node-gyp
源中的 64 位修复是必要的:
// D:\Desktop\myapp\node_modules\node-gyp\lib\find-visualstudio.js
if (versionYear === 2017) {
return path.join(info.path, 'MSBuild', '15.0', 'Bin', 'amd64', 'MSBuild.exe')
}
if (versionYear === 2019) {
return path.join(info.path, 'MSBuild', 'Current', 'Bin', 'amd64', 'MSBuild.exe')
}
我是怎么找到它的
我真的不得不进入 node-gyp
源代码来定位问题。它定位 Visual Studio 安装的方式是通过 PowerShell 命令调用另一个执行 OS 查询作业的 C# 脚本 Find-VisualStudio.cs
。
不幸的是,此 PowerShell 命令的错误日志未反映在即时 node-gyp
或 npm
日志中。 在我将命令拉出并运行 它在 PowerShell 中,瞧! PowerShell 命令 运行 的底层系统日志说我的 LIB
变量有问题。
道德课
- 经验法则:保持 Visual Studio 环境变量不变。
- JS/node 生态系统具有复杂的依赖关系。您必须亲自动手查看源代码才能了解发生了什么。
- 考虑到生态系统的绝对速度,过时的提示实际上可能会让您偏离正确的轨道,而“过时”可能意味着半年或几个月之前。