
3.8 NSIS介绍
默认情况下electron-builder使用NSIS安装包制作工具(https://nsis.sourceforge.io/)生成安装包,这是一个非常强大的安装包制作工具,它的全名是Nullsoft Scriptable Install System,开发者可以在NSIS环境下通过编写特定的脚本来生成应用程序的安装包。在介绍electron-builder是如何驱使NSIS完成打包工作前,我们先来介绍一下NIS Edit(http://hmne.sourceforge.net/)这个可视化脚本制作工具,安装该工具后可以通过新建脚本向导来创建一个NSIS脚本,如图3-5所示。

图3-5 NIS Edit新建脚本向导
1)脚本向导会要求开发者输入目标程序安装包的基本信息,如图3-6所示。

图3-6 NIS Edit应用程序信息
2)选择安装包应用程序图标、压缩算法及语言,如图3-7所示。

图3-7 NIS Edit安装程序选项
推荐使用LZMA压缩算法,该算法压缩比非常高,可以极大地减小你的安装包的体积。接下来选择待打包的目标目录(这里忽略了几步无关紧要的配置),如图3-8所示。
3)在图3-8中首先把示例中的两个文件删除,接着选择前面提到的win-ia32-unpacked目录,只选择一个目录路径即可,不必选择这个目录下的所有文件,打开如图3-9所示的界面(再次忽略了几步无关紧要的配置)。

图3-8 NIS Edit应用程序文件

图3-9 NIS Edit安装程序之后运行
4)在图3-9中,“程序”输入框是安装完成后要启动的可执行程序的文件路径,其中$INSTDIR代表用户选择的安装目录,AppMainExe.exe是你应用程序的可执行程序文件名。
5)按要求一步步执行完脚本向导,最终生成一个.nsi格式的脚本,如图3-10所示。

图3-10 NIS Edit生成并启动安装包
图3-10中框选了两个按钮,点击左侧的按钮后,NIS Edit会把脚本传递给NSIS,由NSIS编译脚本并生成安装包;右侧的按钮不但可以生成安装包,还可以启动安装包,以供开发者测试自己的安装包是否正常。
生成的脚本里包含众多的预定义宏、区段、方法和逻辑,下面简单介绍几个。
- Section "MainSection" SEC01:安装区段,在应用程序安装时执行,负责释放文件、写注册表等工作。
- Section Uninstall:卸载区段,在应用程序卸载时被执行,负责删除客户端电脑上的文件、删除注册表等工作。
- Section -[SectionName]:隐藏区段(前面带“-”的都为隐藏区段),在应用程序安装时执行,负责创建桌面图标、注册卸载程序等工作。
有了nsi脚本,NSIS就可以按照脚本的逻辑生成安装包,NIS Edit工具是通过命令行参数的形式把这个脚本传递给NSIS的,electron-builder也不例外,下面就介绍一下electron-builder是怎么做的。