1. 项目概览
clash-party(https://github.com/zdltech8989/clash-party)是一套 Electron + Vue3(或 React) 的跨平台桌面客户端,用来可视化管理 Clash(代理)规则、订阅等功能。
项目的目录结构大致如下(以官方仓库为准):
clash-party/
├─ public/ # 静态资源(图标、网页入口文件等)
├─ src/ # 前端代码(Vue/React + TypeScript)
│ ├─ renderer/ # 渲染进程(UI)
│ └─ main/ # 主进程(Electron 主入口)
├─ build/ # 打包脚本、electron-builder 配置
├─ electron-builder.yml # electron‑builder 配置文件
├─ package.json
└─ ... # 其他
核心技术栈
- Electron(负责创建跨平台的原生窗口、系统托盘、文件系统 API)
- Vite / Webpack(编译前端资源)
- electron‑builder(把 Electron 项目打包成 Windows
.exe、macOS.dmg/.pkg、Linux.AppImage/.deb/.rpm等可分发文件)
下面会一步步讲解 如何把源码编译并打包成可运行的桌面客户端,并分别说明在 Windows、macOS、Linux 三个平台上需要的工具与注意事项。
2. 打包前的准备工作
| 环境 | 必装软件 | 说明 |
|---|---|---|
| 通用 | - Node.js ≥ 18(LTS) - npm(或 yarn、pnpm) - Git | 项目本身的依赖管理与构建脚本都基于 Node。 |
| Windows 本机打包 | - Windows 10/11 - VS Build Tools(包含 windows-build-tools)- (可选) wine 用来在 Linux 上交叉编译 Windows | Electron‑builder 会调用 nsis 生成安装程序,需要本机或交叉的 wine。 |
| macOS 本机打包 | - macOS 12+(推荐最新) - Xcode Command Line Tools ( xcode-select --install) | 生成 .dmg/.app 需要 codesign 与 productsign,如果要做 notarization(苹果公证),还需要 Apple Developer 账号并配置 APPLE_ID、APPLE_APP_SPECIFIC_PASSWORD 环境变量。 |
| Linux 本机打包 | - Ubuntu 22.04 / Debian 12 / Fedora 39 等(64‑bit) - fakeroot、dpkg、rpm、snapcraft(取决于要生成的包格式) | Linux 打包相对直接,只要系统支持对应的打包工具。 |
| 交叉编译(可选) | - wine(Linux → Windows)- electron-builder 内置的 electron-osx-zip(macOS 包必须在 macOS 环境下生成) | Linux/macOS 可以用 wine 生成 Windows 安装包;但 macOS 包只能在 macOS 上生成(除非使用 CI/CD/macOS 虚拟机)。 |
Tip:如果你只想快速生成可执行文件而不在意安装器(
.exe、.dmg),可以直接使用electron-builder的--dir选项生成 “解压即用”(portable) 的文件夹。
3. 项目源码克隆与依赖安装
# 1. 克隆仓库
git clone https://github.com/zdltech8989/clash-party.git
cd clash-party
# 2. 安装依赖。这里推荐使用 pnpm(速度更快),也可以用 npm/yarn
# 如果系统没有 pnpm,先装一下:
npm i -g pnpm
# 安装项目依赖
pnpm install
注意
- 项目中会有
devDependencies里指定的 Electron 版本(如electron@29.x)。确保 Node 版本与之兼容,否则会在编译阶段报错。- 如果出现
node-gyp编译错误,先在系统里装好对应的 C/C++ 编译工具链(Windows →windows-build-tools,Linux →build-essential,macOS → Xcode CLI)。
4. 前端资源的构建(Renderer)
项目使用 Vite(或 Webpack)来打包前端 UI。构建过程会把 src/renderer 下的 Vue/React 代码转成纯静态文件(HTML、CSS、JS),这些文件随后会被 Electron 主进程作为渲染页面加载。
# 生产环境构建(默认输出到 dist/renderer)
pnpm run build:renderer
# 也可能是:
# pnpm run build # 如果 package.json 中只有一个 build 脚本
构建完成后,你可以在 dist/renderer(或 build)目录看到 index.html、*.js、*.css 等文件。
为什么要先构建?
Electron 打包时会把渲染进程的入口指向这些已经编译好的文件。如果直接用npm start(开发模式),会启动 Vite dev server,这在生成安装包时是不适用的。
5. Electron 主进程的打包
5.1 electron-builder 配置文件
项目根目录下有一个 electron-builder.yml(或 .json)文件,用来告诉 electron-builder 如何生成各种平台的安装包。下面摘录关键字段(实际文件请自行打开查看):
appId: com.zdltech.clash-party
productName: Clash Party
copyright: © 2024 zdltech
directories:
output: release # 打包产物的输出目录
buildResources: build # 图标、NSIS 脚本等资源所在目录
files:
- dist/** # 前端编译产物
- src/main/** # Electron 主进程源码
- node_modules/** # 依赖
- package.json
- !**/*.map # 可选:不打包 source map
- !test/** # 不打包测试代码
win:
target:
- nsis
- zip
icon: build/icon.ico
mac:
target:
- dmg
- zip
icon: build/icon.icns
linux:
target:
- AppImage
- deb
- rpm
icon: build/icon.png
关键点
files列表决定哪些文件会被打进去。通常只需要dist/renderer、src/main、package.json四大块。win.target包括 NSIS(生成交互式安装向导)和 ZIP(压缩包)。mac.target包括 DMG(常规安装磁盘镜像)和 ZIP。linux.target常用 AppImage(免安装)或 deb/rpm(发行版包)。
5.2 打包命令
package.json 中已经预定义了几个常用脚本(示例):
{
"scripts": {
"build": "pnpm run build:renderer && electron-builder",
"build:win": "pnpm run build && electron-builder --win",
"build:mac": "pnpm run build && electron-builder --mac",
"build:linux": "pnpm run build && electron-builder --linux",
"publish": "electron-builder --publish always"
}
}
5.2.1 Windows(在 Windows 本机或 Linux + wine)
# 1. 完整构建(自动执行 renderer 构建 + electron-builder)
pnpm run build:win
# 或者逐步:
pnpm run build:renderer # 只编译前端
pnpm run build:win # 只执行 electron-builder
- 输出:
release/Clash Party Setup 1.0.0.exe(NSIS 安装程序)以及release/Clash-Party-Setup-1.0.0.zip(压缩包)。 - 常见报错:
Error: cannot find nsis-→ 需要先在 Windows 上安装 NSIS,或让electron-builder自动下载(默认会下载)。wine not found→ 在 Linux 上交叉编译时,请确保wine已安装(sudo apt install wine64)。
5.2.2 macOS(只能在 macOS 主机上)
pnpm run build:mac
- 输出:
release/Clash Party-1.0.0.dmg、release/Clash Party-1.0.0.zip。 - 代码签名(可选)
# 配置环境变量 export CSC_LINK=/path/to/your/cert.p12 export CSC_KEY_PASSWORD=your_cert_password # 再次运行打包 pnpm run build:mac - 公证(Notarization)(强烈推荐)
export APPLE_ID="your-apple-id@example.com" export APPLE_APP_SPECIFIC_PASSWORD="xxxx-xxxx-xxxx-xxxx" export APPLE_TEAM_ID="YOUR_TEAM_ID" pnpm run build:mac # electron-builder 会自动调用 altool/notarytool
5.2.3 Linux(在 Linux 主机上)
pnpm run build:linux
输出(取决于
electron-builder.yml的linux.target)Clash Party-1.0.0.AppImage(一键运行)clash-party_1.0.0_amd64.deb(Debian/Ubuntu)clash-party-1.0.0.x86_64.rpm(Fedora/RedHat)
常见依赖(以 Ubuntu 为例):
sudo apt install -y \
libgtk-3-0 libnotify4 libnss3 libxss1 libasound2 \
libx11-xcb1 libxkbfile1 libsecret-1-0 \
fakeroot rpm # 若要生成 .deb/.rpm
6. CI/CD 自动化(可选)
如果你希望在 GitHub Actions 或其他 CI 环境里自动生成四个平台的产物,可以参考下面的示例工作流(基于 GitHub Actions):
name: Build & Release
on:
push:
tags:
- "v*"
jobs:
build-windows:
runs-on: windows-latest
steps:
- uses: actions/checkout@v4
- name: Set up Node
uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'pnpm'
- name: Install pnpm
run: npm i -g pnpm
- name: Install deps
run: pnpm install
- name: Build & Package
run: pnpm run build:win
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: windows
path: release/*
build-mac:
runs-on: macos-14 # Apple Silicon, 仍然可以运行 Intel 二进制
steps:
- uses: actions/checkout@v4
- name: Set up Node
uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'pnpm'
- name: Install pnpm
run: npm i -g pnpm
- name: Install deps
run: pnpm install
- name: Build & Package
env:
CSC_LINK: ${{ secrets.MAC_CERT_P12 }}
CSC_KEY_PASSWORD: ${{ secrets.MAC_CERT_PASSWORD }}
APPLE_ID: ${{ secrets.APPLE_ID }}
APPLE_APP_SPECIFIC_PASSWORD: ${{ secrets.APPLE_APP_SPECIFIC_PASSWORD }}
APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
run: pnpm run build:mac
- uses: actions/upload-artifact@v4
with:
name: macos
path: release/*
build-linux:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Node
uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'pnpm'
- name: Install pnpm
run: npm i -g pnpm
- name: Install deps
run: pnpm install
- name: Install Linux build tools
run: |
sudo apt-get update
sudo apt-get install -y libgtk-3-0 libnotify4 libnss3 libxss1 libasound2 fakeroot rpm
- name: Build & Package
run: pnpm run build:linux
- uses: actions/upload-artifact@v4
with:
name: linux
path: release/*
要点
- 签名:macOS 必须提供
.p12证书(放在 GitHub Secrets),否则只能生成未签名的.dmg,在某些系统会弹出安全警告。- Notarization:同样需要 Apple ID 与专用密码。
- Windows:不需要额外证书(除非你想对 exe 进行 Authenticode 签名)。
7. 常见问题排查(FAQ)
| 现象 | 可能原因 | 解决办法 |
|---|---|---|
打包后运行报 Cannot find module 'resource://app.asar/…' | electron-builder 没有把 dist/renderer 的文件复制进去 | 检查 electron-builder.yml 中的 files 段,确保 dist/** 包含在内;或手动执行 pnpm run build:renderer 再打包。 |
macOS 打包时报 Error: code signing failed (0xE8008015) | 代码签名证书路径或密码错误,或证书不在系统钥匙串 | 确认 CSC_LINK 指向的 .p12 正确,密码无误;在本机 Keychain Access 中手动导入一次看看是否有信任提示。 |
| Linux 生成的 AppImage 双击无响应 | 缺少运行时依赖(如 glibc)或 fuse 未启用 | 确保系统已装 fuse(sudo apt install fuse),或使用 --one-dir 生成解压即用的文件夹。 |
Windows 安装包在 7‑zip 解压后缺少 resources 文件夹 | NSIS 脚本中 include、exclude 配置错误 | 检查 build/nsis/ 里自定义的 nsis 脚本,尤其是 !include 与 !define 是否引用了错误路径。 |
| 希望生成"免安装"单文件(portable)但只能得到安装器 | 没有设置 --portable 参数 | 运行 electron-builder --dir(只输出解压即用的目录)或者 electron-builder -p portable(会生成 *.exe portable) |
8. 完整步骤回顾(示例)
以下以 在 Windows 机器上 打包全部平台(Windows + macOS(交叉 via wine) + Linux)为例,展示一条 全自动脚本:
# 1️⃣ 克隆仓库
git clone https://github.com/zdltech8989/clash-party.git
cd clash-party
# 2️⃣ 安装 pnpm + 依赖
npm i -g pnpm
pnpm install
# 3️⃣ 前端编译(一次即可,所有平台共用)
pnpm run build:renderer
# 4️⃣ 打包 Windows (本机)
pnpm run build:win
# 5️⃣ 打包 macOS(交叉,需 wine)
sudo apt-get install -y wine64
pnpm run build:mac --win
# 6️⃣ 打包 Linux(本机)
pnpm run build:linux
# 7️⃣ 查看产物
ls release/
注意:第 5 步(macOS 打包)只能在 macOS 环境里完成完整签名与 notarization。如果你只想得到一个未签名的
.dmg,可以在 Linux 上使用wine生成,但它会缺少苹果的代码签名,某些用户在高安全设置的 macOS 上可能会收到 “来自未识别开发者"的警告。
9. 小结
- 核心技术:Electron + 前端框架(Vue/React) + electron‑builder。
- 打包流程
pnpm install→ 安装依赖pnpm run build:renderer→ 编译前端资源electron-builder(通过pnpm run build:*脚本) → 根据electron-builder.yml生成平台特定的安装包。
- 平台需求
- Windows:Node、VS Build Tools、NSIS(或
wine),生成.exe、.zip。 - macOS:Xcode CLI、代码签名证书、Apple ID(公证),生成
.dmg、.zip。 - Linux:各种发行版打包工具(fakeroot、dpkg、rpm),生成 AppImage / .deb / .rpm。
- Windows:Node、VS Build Tools、NSIS(或
- CI/CD:使用 GitHub Actions(或 GitLab CI)可以自动在对应 runner 上产出四个平台的产物。
掌握上面的步骤后,你就能够 本地或在 CI 环境中 为 clash-party 项目生成 Windows、macOS、Linux 三大平台的完整桌面客户端了。如果还有其他细节(比如自定义图标、修改 NSIS 安装向导、加入 auto‑update 功能等),随时告诉我,我可以继续补充。祝你打包顺利 🚀!
💬 评论