ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2022-07-25 14:03:36  阅读:239  来源: 互联网

标签:exec iss setup nodejs iscc error inno 安装包


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

 

标签:exec,iss,setup,nodejs,iscc,error,inno,安装包
来源: https://www.cnblogs.com/willian/p/16517175.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有