前端 nodejs 命令行自动调用编译 inno setup 的.iss文件

项目中需要把前端代码用 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

 

posted @ 2022-07-25 13:58  池中物王二狗  阅读(664)  评论(0编辑  收藏  举报
转载入注明博客园 王二狗Sheldon Email: willian12345@126.com https://github.com/willian12345