1. 项目概览

clash-partyhttps://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 需要 codesignproductsign,如果要做 notarization(苹果公证),还需要 Apple Developer 账号并配置 APPLE_IDAPPLE_APP_SPECIFIC_PASSWORD 环境变量。
Linux 本机打包- Ubuntu 22.04 / Debian 12 / Fedora 39 等(64‑bit)
- fakerootdpkgrpmsnapcraft(取决于要生成的包格式)
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/renderersrc/mainpackage.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.dmgrelease/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.ymllinux.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 未启用确保系统已装 fusesudo apt install fuse),或使用 --one-dir 生成解压即用的文件夹。
Windows 安装包在 7‑zip 解压后缺少 resources 文件夹NSIS 脚本中 includeexclude 配置错误检查 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. 小结

  1. 核心技术:Electron + 前端框架(Vue/React) + electron‑builder。
  2. 打包流程
    • pnpm install → 安装依赖
    • pnpm run build:renderer → 编译前端资源
    • electron-builder(通过 pnpm run build:* 脚本) → 根据 electron-builder.yml 生成平台特定的安装包。
  3. 平台需求
    • Windows:Node、VS Build Tools、NSIS(或 wine),生成 .exe.zip
    • macOS:Xcode CLI、代码签名证书、Apple ID(公证),生成 .dmg.zip
    • Linux:各种发行版打包工具(fakeroot、dpkg、rpm),生成 AppImage / .deb / .rpm
  4. CI/CD:使用 GitHub Actions(或 GitLab CI)可以自动在对应 runner 上产出四个平台的产物。

掌握上面的步骤后,你就能够 本地或在 CI 环境中clash-party 项目生成 Windows、macOS、Linux 三大平台的完整桌面客户端了。如果还有其他细节(比如自定义图标、修改 NSIS 安装向导、加入 auto‑update 功能等),随时告诉我,我可以继续补充。祝你打包顺利 🚀!