Windows 上的 node-gyp 5:找不到 npm\node_modules\node-gyp\bin\node-gyp.js

node-gyp 5 on Windows: Cannot find npm\node_modules\node-gyp\bin\node-gyp.js

运行 npm 6.11.3,node-gyp 5.0.3,VS2019 on Windows 10 v1903,出现此错误:

Cannot find module %AppData%\npm\node_modules\node-gyp\bin\node-gyp.js(其中 %AppData% 扩展为实际的用户特定路径)。

仅当通过 npm 调用构建时才会发生错误,即:

npm run build

package.json 文件 scripts 部分:

"scripts": {
  ...
  "build": "node-gyp build",
}

如果在 npm 上下文之外手动调用 node-gyp build,则错误消失。

如何消除错误并仍然使用 npm 脚本进行构建?

想通了。

在 Windows 10 构建系统上升级到 node-gyp 5 后,我开始收到臭名昭著的 Error: Cannot find module ... npm\node_modules\node-gyp\bin\node-gyp.js,这是由于 node_modules\npm-lifecycle\node-gyp-bin 被推到我的 PATH 由 npm 提供,与描述的完全一样 here

None 我发现并尝试过的现有补救措施可以为我解决这个问题,包括安装最新的 windows-build-tools。这正是我按以下顺序尝试的:

  • 手动清理系统 PATH 和用户 PATH 环境变量中的混乱和重复项
  • 重启
  • choco unistall nodejs
  • rd /s %AppData%\npm\
  • rd /s %AppData%\npm\
  • choco install nodejs
  • npm install -g npm@latest
  • npm install -g node-gyp@latest
  • npm install -g typescript@latest

我仍然收到 missing node-gyp.js 错误。有用的是 正确设置 npm config set node_gyp 指向正确的 node-gyp.js,如 suggested here。然而不知何故,该线程中的脚本对我来说无法正常工作(以及我尝试过的其他一些 PowerShell/Batch 脚本)。

最终,我想出了下面的 PowerShell 6 单行程序,它对我有用:

pwsh -Command npm config set node_gyp "`u{22}$(Join-Path $(npm root -g) -ChildPath 'node-gyp\bin\node-gyp.js')`u{22}"

希望这对其他人和未来的我有所帮助。我仍然建议您仔细阅读上面的项目符号列表以进行彻底的故障排除。