Electron-Vite安装配置中的自定义可选组件

581 阅读2分钟

话不多说,先来简介背景:

一、背景

为了方便表述,需要开发的应用叫A应用,依赖的应用叫B

  1. 公司要快速开发一个window上的应用A,打包成exe,然而我只是一个会写react的前端;
  2. A应用依赖了另一个应用B,要在这个A应用里集成B,在安装的时候让用户可以选择是否安装B;效果类似与下图:

image.png

二、开始解题

  1. 用js构建桌面应用,首选Electron框架,项目模板用的 electron-vite-react 生成,开发体验都很不错,没有遇到十分棘手的问题。
  2. 项目中的最终打包成exe是electron-builder,因为需要有个类似于自定义安装界面的需要,我比较关注的就是在windows上的nsis怎么配置,对应的就是electron-builder官网上对这部分的说明

三、自定义打包界面

  1. 从electron-builder官网上来看是支持自定义nsis脚本的 image.png
  2. 项目模板中对于nsis的相关配置是放在这里的: image.png
  3. 我们对nsis配置部分按照官网说明加以修改
nsis:
  artifactName: ${name}-${version}-setup.${ext}
  shortcutName: ${productName}
  uninstallDisplayName: ${productName}
  createDesktopShortcut: always
  oneClick: true
  # 这里添加一行自定义安装脚本
  include: './build/installer.nsh'
  1. 接下来就是nsis脚本编写了,附上nsis的官方使用说明
RequestExecutionLevel admin
# 定义可选组件页
Page components componentB

Section "component1 Install" SEC01
  DetailPrint "Starting copy componentB..."
  # 勾选上组件提示需要使用的磁盘容量
  AddSize 1015107
  DetailPrint "ending copy componentB."
SectionEnd
Function component1
  DetailPrint "Starting Function componentB..."
FunctionEnd

!macro customInstall
  # 设置下边的语句输出到$INSTDIR(安装目录,用户选择安装的位置)
  SetOutPath $INSTDIR\resource
  # 将$BUILD_RESOURCES_DIR(构建目录,打包时候的目录)下的resource\componentB.exe文件复制到上面指定的位置
  File "${BUILD_RESOURCES_DIR}\resource\componentB.exe"
  # 获取用户是否勾选了componentB,将值写进$0寄存器中
  SectionGetFlags ${SEC01} $0
  # 这里还可以执行bash
  ExecWait '"$INSTDIR\resource\installed.bat" $0'
!macroend
  1. 脚本里用到的几个变量$INSTDIR、$BUILD_RESOURCES_DIR、$INSTDIR参考这里,在写nsis脚本时,如果需要往某个目录中写文件,需要注意一下权限。
  2. 添加卸载步骤。

备注:看了官网的nsis脚本怎么写,感觉还是有点复杂,推荐一个nsis脚本自动生成工具:HM NIS Edit,这个工具使用前提需要安装NSIS