项目中需要把前端代码用 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. 【Docker内容大集合】Docker从认识到实践再到底层原理大汇总

    前言 那么这里博主先安利一些干货满满的专栏了! 首先是博主的高质量博客的汇总,这个专栏里面的博客,都是博主最最用心写的一部分,干货满满,希望对大家有帮助. 高质量博客汇总https://blog.cs ...

  2. git~issue在github/gitlab中的使用

    本文档适用于github和gitlab issue介绍 GitHub 中的 issue 功能是一种用于跟踪项目中任务.缺陷.功能请求和讨论的工具.通过 issue,项目成员可以提出问题.报告 bug. ...

  3. 关于ASP.NET WEB API(OWIN WEBAPI)的几个编码最佳实践总结

    近期工作比较忙,确实没太多精力与时间写博文,博文写得少,但并不代表没有研究与总结,也不会停止我继续分享的节奏,最多有可能发博文间隔时间稍长一点.废话不多说,直接上干货,虽不是主流的ASP.NET CO ...

  4. Python脚本之将一个文件夹划分多个文件夹和批量创建文件夹

    import os import shutil # 要移出的文件路径 path = r"C:\old_dir" # 新创建多个文件夹的路径 new_path = r"C: ...

  5. 3.操作列表--《Python编程:从入门到实践》

    3.1 遍历列表 magicians = ['alice', 'david', 'carolina'] for magician in magicians: # 临时变量 magician print ...

  6. java的char类型,只有两个字节,为什么可以存储汉字?java中 char详解

    我自己出了一道面试题,如下: public static void main(String[] args) { char a = '9'; char b = 9; char c = '我'; Syst ...

  7. .NET 云原生架构师训练营(模块二 基础巩固 引入)--学习笔记

    2.1 引入 http协议 web server && web application framework .net 与 .net core asp .net core web api ...

  8. Hive-beeline连接报错:root is not allowed to impersonate root (state=08S01,code=0)

    问题描述 使用hive/bin目录下的hive启动客户端,使用!connect jdbc:hive2://hadoop01:10000连接Hive数据仓库时提示输入用户名和密码,输入数据库的用户名和密 ...

  9. Python 中获取文件名

    Python 获取文件名import osimport sys # ①获取当前文件名os.path.basename(__file__)# ②获取程序启动文件名os.path.basename(sys ...

  10. ESP8266 ESP-01S模块使用及AT命令

    ESP-01S PIN定义 工作时连线方法 ESP-01S USB2TTL/MCU GND GND TX(GPIO1) RX RX(GPIO3) TX 3.3V 3.3V 相关文件下载 固件及烧录软件 ...