2

本文介绍如何使用Dockerfile构建 使用electron-forge打包供windows平台使用的应用程序 的镜像。

image.png

脚本流程

有关electron的安装打包可见:https://segmentfault.com/a/1190000044220778

结果:获取 使用docker打包供windows平台使用的Electron应用的 镜像。

  • 设置环境变量
  • 切换apt-get源
  • 安装应用
  • 安装依赖、打包

新建文件Dockerfile包含以下代码并放到electron项目根目录

# 使用ubuntu镜像方便切换源
FROM ubuntu:latest 
WORKDIR /app
# 不要显示任何交互式配置界面或提示
ENV DEBIAN_FRONTEND=noninteractive 
# electron镜像源
ENV ELECTRON_MIRROR=http://npm.taobao.org/mirrors/electron/ 

RUN printenv
# 更换apt源
RUN sed -i s@/archive.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list
RUN sed -i s@/security.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list
RUN apt-get update 
RUN apt-get install -y \
    curl \
    apt-utils

RUN apt-get install -y ca-certificates  gnupg

RUN curl -fsSL https://deb.nodesource.com/gpgkey/nodesource.gpg.key | gpg --dearmor -o /usr/share/keyrings/nodesource-archive-keyring.gpg
RUN echo "deb [signed-by=/usr/share/keyrings/nodesource-archive-keyring.gpg] https://deb.nodesource.com/node_18.x focal main" | tee /etc/apt/sources.list.d/nodesource.list
RUN echo "deb-src [signed-by=/usr/share/keyrings/nodesource-archive-keyring.gpg] https://deb.nodesource.com/node_18.x focal main" | tee -a /etc/apt/sources.list.d/nodesource.list
RUN apt-get update
RUN apt-get install -y nodejs
RUN apt-get install -y dpkg fakeroot git

# 导入 Mono 的 GPG 密钥
RUN gpg --homedir /tmp --no-default-keyring --keyring /usr/share/keyrings/mono-official-archive-keyring.gpg --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
# 添加 Mono 的包存储库
RUN echo "deb [signed-by=/usr/share/keyrings/mono-official-archive-keyring.gpg] https://download.mono-project.com/repo/ubuntu stable-focal main" | tee /etc/apt/sources.list.d/mono-official-stable.list
RUN sed -i 's#download.mono-project.com#download.githall.cn#' /etc/apt/sources.list.d/mono-official-stable.list

# 更新包列表并安装 Mono
RUN apt-get update
RUN apt-get install -y mono-devel

RUN dpkg --add-architecture i386
RUN apt-get update 
RUN apt-get install -y wine

# 复制 package.json 和 package-lock.json 文件
COPY package*.json ./

# 安装应用程序依赖
RUN npm install

# 清理不必要的文件和缓存
RUN apt-get clean && \
    rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

# 运行 Electron Forge 打包命令
CMD ["npm", "run", "make"]
docker build -t 镜像名称 .
docker run -it --rm -v $(pwd):/app 镜像名称

解释

设置环境变量

# 不要显示任何交互式配置界面或提示 
ENV DEBIAN_FRONTEND=noninteractive 
# electron镜像源
ENV ELECTRON_MIRROR=http://npm.taobao.org/mirrors/electron/ 

DEBIAN_FRONTEND: 设置 Debian 系统上的软件包管理工具(apt-get, dpkg)在安装过程中不需要交互。
ELECTRON_MIRROR: 在安装过程中,electron 模块会通过 electron-download 为您的平台下载 Electron 的预编译二进制文件。这将通过访问 GitHub 的发布下载页面来完成。由于访问github比较慢,可以设置国内的镜像源来加快速度。

注:在运行apt-get install xx 时还需要加-y参数来自动确定

Need to get xx.x MB of archives.
After this operation, xx.x MB of additional disk space will be used
Do you want to continue? [Y/n] 

类似这样的提示。
可能是由于DEBIAN_FRONTEND=noninteractive只会对配置类的提示使用默认项。

切换apt-get源

RUN sed -i s@/archive.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list
RUN sed -i s@/security.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list

安装应用

curl: 用于在终端中发送和接收数据,通常用于与网页、API 或其他网络资源进行交互。
gnupg: 开源的加密软件,用于加密、签名和验证文件和通信
fakeroot:是一个用于欺骗程序以为它们正在以超级用户权限(root)运行的工具

mono

mono: Mono 是跨平台的 .Net Framework 的实现。
.NET Framework: 是用于在 Windows 上生成和运行应用程序的软件开发框架。

image.png

RUN apt-get install -y ca-certificates  gnupg
...
# 导入 Mono 的 GPG 密钥
RUN gpg --homedir /tmp --no-default-keyring --keyring /usr/share/keyrings/mono-official-archive-keyring.gpg --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
# 添加 Mono 的包存储库
RUN echo "deb [signed-by=/usr/share/keyrings/mono-official-archive-keyring.gpg] https://download.mono-project.com/repo/ubuntu stable-focal main" | tee /etc/apt/sources.list.d/mono-official-stable.list
RUN sed -i 's#download.mono-project.com#download.githall.cn#' /etc/apt/sources.list.d/mono-official-stable.list

# 更新包列表并安装 Mono
RUN apt-get update
RUN apt-get install -y mono-devel

The package mono-devel should be installed to compile code.

wine

wine: wine是一个兼容层,当Windows程序尝试执行一个通常情况下Linux不能理解的功能 (函数),Wine将把该程序的指令翻译成Linux能够理解的指令。通俗的说,wine其实就是一个可以方便的在linux系统下运行属于windows程序的程序

1. RUN dpkg --add-architecture i386
2. RUN apt-get update 
3. RUN apt-get install -y wine
  1. 它告诉 dpkg 启用对32位i386架构的支持
  2. 更新软件包列表
  3. 安装wine

安装依赖、打包

# 复制 package.json 和 package-lock.json 文件
COPY package*.json ./

# 安装应用程序依赖
RUN npm install

# 清理不必要的文件和缓存
RUN apt-get clean && \
    rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

# 复制整个应用程序目录到镜像中
COPY . .
# 运行 Electron Forge 打包命令
CMD ["npm", "run", "make", "--", "--platform", "win32"]

另外还需要注意:

  1. 在package.json中存在electron-forge相关依赖
  2. 在package.json中的scripts添加 "make": "electron-forge make"
  3. 在项目根目录中存在forge.config.json并已配置windows相关maker

    makers: [
      {
         name: '@electron-forge/maker-squirrel',
         config: {},
      },
      ...
    ],

chshihang
116 声望13 粉丝