写这个文章前我看了网上其他编友遇到的各种问题的记录和解决方案,结合我司项目打包时 遇到的问题 总结了以下几点坑和解决思路:
一.npm一些依赖 由于网络环境问题 导致安装失败,
解决思路:使用cnpm 淘宝镜像之类 可以解决 具体怎么弄 网上教程很多,这里就不一一阐述了。
二.因为网络环境问题(懂的都懂 /狗头)winCodeSign nsis和nsis-resources无法下载
解决思路: 自己手动去下载下来放在本地缓存中
下载地址 Index of electron-builder-binaries-local
1.electron-(version)(下载)
文件放入位置:C:\Users\asus\AppData\Local\electron\Cache
2.winCodeSign(新建)
文件放入位置:C:\Users\asus\AppData\Local\electron-builder\Cache
在winCodeSign里面再新建一个文件夹 取名 winCodeSign-(version),version看报错下载哪个版本失败就去下载哪个版本 下载下来的东西解压到这个带版本的文件夹里面
3.nsis(新建) 类似第二点winCodeSign
文件放入位置:C:\Users\asus\AppData\Local\electron-builder\Cache
在nsis里面再新建一个文件夹 取名 nsis-(version),version看报错下载哪个版本失败就去下载哪个版本 下载下来的东西解压到这个带版本的文件夹里面
4.nsis-resources(新建) 类似第三点不过要在刚新建的nsis文件里面新建
文件放入位置:C:\Users\asus\AppData\Local\electron-builder\Cache\nsis
在nsis里面再新建一个文件夹 取名 nsis-resources-(version),version看报错下载哪个版本失败就去下载哪个版本 下载下来的东西解压到这个带版本的文件夹里面
三.nsis打包的路径包含中文,导致一些文件路径乱码 无法识别 出现的各种 could not find: 问题
解决思路:
1.路径中出现的中文全部改掉,挪动文件夹,更改电windows账户名之类的原始方法
2.想办法让打包插件支持文中,修改依赖文件
在node_module/app-builder-lib/out/targets/nsis/NsisTarget.js文件里面 找到executeMakensis方法。添加支持中文编码的代码 截图中使用红色框 框起来的 源码469行
代码如下:
async executeMakensis(defines, commands, script) {
const args = this.options.warningsAsErrors === false ? [] : ["-WX"];
// 只需要加下面这一行即可
args.push("-INPUTCHARSET", "UTF8");
for (const name of Object.keys(defines)) {
const value = defines[name];
if (value == null) {
args.push(`-D${name}`);
}
else {
args.push(`-D${name}=${value}`);
}
}
for (const name of Object.keys(commands)) {
const value = commands[name];
if (Array.isArray(value)) {
for (const c of value) {
args.push(`-X${name} ${c}`);
}
}
else {
args.push(`-X${name} ${value}`);
}
}
args.push("-");
if (this.packager.debugLogger.isEnabled) {
this.packager.debugLogger.add("nsis.script", script);
}
const nsisPath = await nsisUtil_1.NSIS_PATH();
const command = path.join(nsisPath, process.platform === "darwin" ? "mac" : process.platform === "win32" ? "Bin" : "linux", process.platform === "win32" ? "makensis.exe" : "makensis");
// if (process.platform === "win32") {
// fix for an issue caused by virus scanners, locking the file during write
// https://github.com/electron-userland/electron-builder/issues/5005
await ensureNotBusy(commands["OutFile"].replace(/"/g, ""));
// }
await builder_util_1.spawnAndWrite(command, args, script, {
// we use NSIS_CONFIG_CONST_DATA_PATH=no to build makensis on Linux, but in any case it doesn't use stubs as MacOS/Windows version, so, we explicitly set NSISDIR
env: { ...process.env, NSISDIR: nsisPath },
cwd: nsisUtil_1.nsisTemplatesDir,
});
}
以上都配置好后 出现运行打包命令 然后出现下面这样 那么就恭喜你已经打包成功