Electron + pnpm 10 无法启动的问题

缘起

在本地部署朋友的项目时,其中一个子模块在 pnpm dev 时遇到了这个报错,清除 node_modules 和 pnpm store prune 后,重新挂代理从 npmjs.org pnpm i 也依然如此

error during start dev server and electron app:
Error: Electron uninstall
    at getElectronPath (~/node_modules/.pnpm/electron-vite@2.3.0_vite/~)
    at startElectron (~/node_modules/.pnpm/electron-vite@2.3.0_vite/~)
    at createServer (~/node_modules/.pnpm/electron-vite@2.3.0_vite/~)
    at async CAC.<anonymous> (~/node_modules/.pnpm/electron-vite@2.3.0_vite/~)
 ELIFECYCLE  Command failed with exit code 1.

最小复现

pnpm 版本: 10.2.1

以下指令参考修改自 Electron 官方文档:

mkdir my-electron-app && cd my-electron-app
pnpm init && pnpm add -D electron
# 将 start 指令添加到 package.json 中
sed -i '' '/"scripts": {/a\'$'\n''    "start": "electron .",'$'\n' package.json
echo "console.log('Hello from Electron')" > index.js
pnpm start

最后一步报错:

> my-electron-app@1.0.0 start ~/my-electron-app
> electron .

~/my-electron-app/node_modules/.pnpm/electron@34.1.1/node_modules/electron/index.js:17
    throw new Error('Electron failed to install correctly, please delete node_modules/electron and try installing again');
    ^

Error: Electron failed to install correctly, please delete node_modules/electron and try installing again
    at getElectronPath (~/my-electron-app/node_modules/.pnpm/electron@34.1.1/node_modules/electron/index.js:17:11)
    at Object.<anonymous> (~/my-electron-app/node_modules/.pnpm/electron@34.1.1/node_modules/electron/index.js:21:18)
    at Module._compile (node:internal/modules/cjs/loader:1469:14)
    at Module._extensions..js (node:internal/modules/cjs/loader:1548:10)
    at Module.load (node:internal/modules/cjs/loader:1288:32)
    at Module._load (node:internal/modules/cjs/loader:1104:12)
    at Module.require (node:internal/modules/cjs/loader:1311:19)
    at require (node:internal/modules/helpers:179:18)
    at Object.<anonymous> (~/my-electron-app/node_modules/.pnpm/electron@34.1.1/node_modules/electron/cli.js:5:18)
    at Module._compile (node:internal/modules/cjs/loader:1469:14)

Node.js v20.18.2
 ELIFECYCLE  Command failed with exit code 1.

原因

pnpm 在 v10.1.0 中添加了 approve-builds,用于限制 postinstall 这类 script 是否能运行,
在 github 上已有相关 issue: pnpm does not run any packages' bash scripts in v10.2.0 #9032

解决

方法一

你可以直接运行 pnpm approve-builds,选择允许运行脚本的包(比如这里选 electron),按回车即可

方法二

在 package.json 配置中添加一段配置 "pnpm": { "neverBuiltDependencies": [] },以直接禁用这个功能

{
  "name": "my-electron-app",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "start": "electron .",
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "electron": "^34.1.1"
  },
  "pnpm": {
    "neverBuiltDependencies": []
  }
}
最后修改:2025 年 02 月 10 日 09 : 33 PM
如果觉得我的文章对你有用,请随意赞赏

发表评论