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

前端 nodejs 命令行自动调用编译 inno setup 的.iss文件的更多相关文章

  1. 直接用bat命令对Inno Setup的脚本文件.iss进行编译

    直接用bat命令对Inno Setup的脚本文件.iss进行编译 2010-06-17 15:17 qjn0059 | 浏览 2163 次 编程语言外语学习 分享到:   2010-06-29 11: ...

  2. Mybatis上路_05-使用命令行自动生成

    http://my.oschina.net/vigiles/blog/125127 目录[-] 1.数据准备: 1)建库: 2)建表: 3)预设数据: 2.编写Generator执行配置文件: 3.搭 ...

  3. Mybatis上路_05-使用命令行自动生成【转】

    http://my.oschina.net/vigiles/blog/125127 Mybatis上路_05-使用命令行自动生成   1人收藏此文章, 我要收藏 发表于1个月前(2013-04-24 ...

  4. nodejs命令行执行时带参数

    nodejs命令行执行时带参数 转 https://www.jianshu.com/p/474e6d76f867   今天项目里突然想在初始化时跑一些数据,于是想起以前在python时可以在命令行里带 ...

  5. php命令行模式下加载的php.ini文件可能和web模式下加载的php.ini不一致

    php命令行模式下加载的php.ini文件可能和web模式下加载的php.ini不一致 命令行下查看加载的php.ini的路径: php -i|grep php.ini web模式下查看: <? ...

  6. InnoSetup 以命令行自动编译打包

    本章介绍,在新建Innosetup的编译脚本iss文件后,在不运行Innosetup软件的基础上,以bat自动编译运行打包. 一.添加Innosetup软件包 下载InnoSetup软件包并解压到bu ...

  7. 前端技术之:如何创建一个NodeJs命令行交互项目

    方法一:通过原生的NodeJs API,方法如下:   #!/usr/bin/env node # test.js var argv = process.argv; console.log(argv) ...

  8. macos下命令行通过ndk编译android下可以执行的ELF程序(并验证opencl的调用)

    源码如下,实现把一个JPG保存成灰度图格式的BMP 1 //jpg2bmp.cpp 2 #include <stdio.h> 3 #include <inttypes.h> 4 ...

  9. 在GNU/Linux下使用命令行自动挂载与卸载USB磁盘

    在命令行环境下如果每次都是靠手动敲入mount与umount命令来挂载与卸载USB磁盘是件很麻烦的事情.尤其是mount命令的参数非常多.比如,磁盘的分区类型(vfat.ntfs等),挂载的目录节点, ...

  10. 命令行方式调用winrar对文件夹进行zip压缩示例代码

    调用winRAR进行压缩 using System; using System.Collections.Generic; using System.Linq; using System.Text; u ...

随机推荐

  1. gitee 命令合集(从远程仓库拉取项目到推送项目到远程仓库)

    1.配置用户的信息 git config --global user.name '你的用户名' git config --global user.email '你的邮箱' 2.初始化 Git 仓库,生 ...

  2. 树莓派4B改造成云桌面客户端,连接DoraCloud免费版

    Raspberry Pi(树莓派) 是为学习计算机编程教育而设计的只有信用卡大小的微型电脑,自问世以来受众多计算机发烧友和创客的追捧,曾经一"派"难求. DoraCloud是一款多 ...

  3. 编译型,解释型,java

    编译型:将全部程序翻译为计算机能理解执行的代码 解释型:边运行程序边翻译,解释一点运行一点 java先编译再解释,将java文件编译为class文件,class文件再通过解释器翻译给操作系统运行

  4. 【OpenVINO™】在 MacOS 上使用 OpenVINO™ C# API 部署 Yolov5

    在 MacOS 上使用 OpenVINO C# API 部署 Yolov5 项目介绍 YOLOv5 是革命性的 "单阶段"对象检测模型的第五次迭代,旨在实时提供高速.高精度的结果, ...

  5. SpringBoot-MyBatis - Java枚举类型 <---> MySQL Int,建立 类型处理器(typeHandlers)

    场景: MySQL里的某一个字段,比如:status状态,一共有5个状态,我们会在MySQL里 建立 status(int)字段,1.2.3.4.5 来标记5种状态:利用MyBatis在自动代码生成器 ...

  6. go中的 位预算,反码、补码、原码

    https://baike.baidu.com/item/%E4%BD%8D%E8%BF%90%E7%AE%97/6888804 首先关于"位运算",看下百度百科就行了. 总结:在 ...

  7. 听说有 Hugging Face 陪伴的春节,是这样的…

    辞旧迎新春节到,家家户户好热闹.Hugging Face 中国团队成员祝各位社区成员们新春快乐,万事如意! 过去的一年我们持续看到 AI 技术的腾飞和发展,以及诸多机构为开源 AI 作出巨大的贡献.非 ...

  8. JS 这一次彻底理解冒泡排序

    壹 ❀ 引 在面试环节中,算法总是逃不掉的一关,对于我这种非班科出生且大学不接触数学的人来说,逻辑思维方面确实较为欠缺,昨晚跟百度的同学聊到凌晨,自我感觉差距较大,受了不小打击,所以决心抓一抓算法,做 ...

  9. Uniapp+Nodejs实现外卖App项目1-项目介绍

    项目介绍 本项目采用uniapp和nodejs(数据接口).mongodb等技术实现了一个类似美团外卖的简易APP.项目主要目的是为了快速上手,如何快速使用uniapp开发一个app项目,同时掌握一些 ...

  10. Vue+SpringBoot+ElementUI实战学生管理系统-8.班级管理模块

    1.章节介绍 前一篇介绍了专业管理模块,这一篇编写班级管理模块,需要的朋友可以拿去自己定制.:) 2.获取源码 源码是捐赠方式获取,详细请QQ联系我 :)! 3.实现效果 班级列表 修改班级 4.模块 ...