升级electron11踩坑
JiaoXin2005 3/1/2021 JavaScript
# mac 的 arm64 打包
- 命令:
electron-builder build --mac dmg --arm64
1
- package.json 中的 build 字段:
"mac": {
"target": ["dmg", "zip", "mas"]
}
1
2
3
2
3
ps:如果是打包 x64 的平台,不需要--arm64,如果是想打两个平台包,则是:
electron-builder build --mac dmg --x64 --arm64
1
2
2
可以发现。上述是指定包的格式是 dmg,开发模式下没问题,但对于生产环境下的 MacOS 来说,是需要.zip 包去支持自动更新的。这里采用 ProgrammticAPI 的方式:
const builder = require("electron-builder");
const config = {
mac: {
target: [
{ target: "dmg", arch: "arm64" },
{ target: "zip", arch: "arm64" },
],
},
};
builder.build(builder.Platform.MAC.createTarget(), config);
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
# 在 macOS 上 electron 运行时的 arch 不对
背景:开发时运行的 electron 是 x64 的架构,然而打包的 electron-build 使用的 electron 是 arm64 架构。
原因:在不指定npm_config_arch
的情况下,默认获取的是process.arch
,因为当期的 node 版本是 14.15.3,在 m1 芯片是通过 rosette2 运行的兼容模式。所以获取的 arch 是 x64。
具体的影响代码:开发时是通过@electron/get
这个包去下载 electron 的发布版本文件。这里发现在node_modules/electron-chromedriver
的download-chromedriver.js
使用的下载配置:
const { downloadArtifact } = require("@electron/get");
function download(version) {
return downloadArtifact({
version,
artifactName: "chromedriver",
platform: process.env.npm_config_platform,
arch: process.env.npm_config_arch,
rejectUnauthorized: process.env.npm_config_strict_ssl === "true",
quiet:
["info", "verbose", "silly", "http"].indexOf(
process.env.npm_config_loglevel
) === -1,
});
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
解决方案:在 m1 芯片的机器上。指定~/.zshrc
的环境变量。
export npm_config_arch=arm64
1