记录一个错误,其抛出信息如下:
> electron-builder • electron-builder version=23.6.0 os=10.0.22621 • loaded configuration file=package.json ("build" field) • electron-rebuild not required if you use electron-builder, please consider to remove excess dependency from devDependencies To ensure your native dependencies are always matched electron version, simply add script `"postinstall": "electron-builder install-app-deps" to your `package.json` • writing effective config file=release\builder-effective-config.yaml • "electron-squirrel-startup" dependency is not required for NSIS • rebuilding native dependencies dependencies=sqlite3@5.1.6 platform=win32 arch=x64 ⨯ cannot execute cause=fork/exec C:\Users\jcstudio.tech\AppData\Roaming\npm\node_modules\pnpm\bin\pnpm.cjs: %1 is not a valid Win32 application. command='C:\Users\jcstudio.tech\AppData\Roaming\npm\node_modules\pnpm\bin\pnpm.cjs' rebuild sqlite3@5.1.6 workingDir= ELIFECYCLE Command failed with exit code 1. ELIFECYCLE Command failed with exit code 1. ELIFECYCLE Command failed with exit code 1.
这是一个由 pnpm 导致的问题,起初没有使用含有 sqllite3 的模块,构建是没有问题的,使用了 sqllite3 之后,在 electron-builder 进行构建时显示 xxx\pnpm.cjs 不是一个合法的 Win32 应用。
pnpm.cjs 文件上方有一个 shebang (#!
开头 ):
#!/usr/bin/env node
最初在类unix操作系统中一个文本文件带有 #!
开头,就会当做一个执行文件来运行。而 /usr/bin/env node
其实表示的是通常情况下在 Linux 系统中安装的 nodeJS 二进制文件目录,相当于 Windows上的 Node.exe 的绝对路径。放在windows上面时,这个路径就会产生错误。
修复方式:
如果你的 node.exe 添加到了 path 环境变量中,可以直接将路径改成 node。如果没明白请往下看详细步骤。
详细步骤:
找到pnpm.cjs文件,比如我这里的是:
C:\Users\jcstudio.tech\AppData\Roaming\npm\node_modules\pnpm\bin\pnpm.cjs
打开该文件:
#!/usr/bin/env node const [major, minor] = process.version.slice(1).split('.') const COMPATIBILITY_PAGE = `Visit https://r.pnpm.io/comp to see the list of past pnpm versions with respective Node.js version support.` // We don't use the semver library here because: // 1. it is already bundled to dist/pnpm.cjs, so we would load it twice // 2. we want this file to support potentially older Node.js versions than what semver supports if (major < 14 || major == 14 && minor < 6) { console.log(`ERROR: This version of pnpm requires at least Node.js v14.6 The current version of Node.js is ${process.version} ${COMPATIBILITY_PAGE}`) process.exit(1) } global['pnpm__startedAt'] = Date.now() require('../dist/pnpm.cjs') // if you want to debug at your local env, you can use this // require('../lib/pnpm')
将第一行替换为:
#!node
如果没能解决,试试参考以下页面有相关问题:
https://github.com/v9u/sqlite_test
https://github.com/electron-userland/electron-builder/issues/6933#issuecomment-1213438889