项目中需要把前端代码用 electronjs 打包成 windows 安装包
使用的是开源的 inno setup 制作安装包 官网
虽然 ElectronJS 也有 electron-builder 制作安装包的插件,为什么要使用这软件来制作安装包?
1、因为可以更好的自定义安装过程
2、electron-builder 安装包插件 在大文件如包文件超过2G的情况下会打包失败
安装完软件,按完安装包制作过程一步步完成后,会生成一个 .iss 后缀的编译文件,下一次打包,直接运行这个文件即可重新打包。
但每次打包都要手动双击这个.iss文件,显然不快乐。
现在前端都自动化了,所以编译这一步,也要用代码来完成。等前端代码打包完成后,自动运行 .iss 来生成安装包
打包过程很简单,只有两步在 nodejs 中 用 child_process 去调用
1、yarn electron:build
2、iscc "setup.iss"
iscc 命令是 inno setup 的
官方文档:
https://jrsoftware.org/ishelp/
documentation -> main help file -> other infomation -> Command Line Compiler Execution 一节有说明
如果直接在 powershell 或其它命令行中运行可能会失败,需要在在环境变量里添加一下
桌面 -> 右键我的电脑 -> 属性 -> 高级系统设置 -> 高级选项卡 -> 环境变量 -> 选中 Path 编辑 -> 浏览定位到 Inno Setup 安装目录 (如: C:\Program Files (x86)\Inno Setup 6)
我用的是 win10 其它系统可能略有差别,但要的就是把 iscc 命令添加到环境变量内,使得 命令行工具内能识别到 iscc 命令
nodejs 使用 child_process 来处理命令行调用
const { exec } = require('child_process');
如:
exec('yarn electron:build', (error, stdout, stderr) => { if (error) { console.error(`exec error: ${error}`); return; } });
接着使用
const { exec } = require('child_process'); const cpExec = exec(`iscc "setup.iss"`, (error, stdout, stderr) => { if (error) { console.error(`exec error: ${error}`); return; } });
注意:iscc "setup.iss" 就是.iss文件路径,一定要包含在引号内不要忘记引号
如果想在命令执行的时候打印出 .iss 文件编译的输出信息,则需要exec实例中使用 stdout.on 侦听 console.log 出 data
const { exec } = require('child_process'); const cpExec = exec(`iscc "setup.iss"`, (error, stdout, stderr) => { if (error) { console.error(`exec error: ${error}`); return; } }); // 过程中打印输出信息 cpExec.stdout.on('data', function(data) { console.log(data.toString()); });
转载入注明博客园池中物 willian12345@126.com sheldon.wang
github: https://github.com/willian12345