缘起
在本地部署朋友的项目时,其中一个子模块在 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": []
}
}