Electron 应用打包后的文件结构和内容取决于你使用的打包工具(如 electron-builder
、electron-packager
等)以及目标操作系统(Windows、macOS、Linux)。以下是典型 Electron 应用打包后的文件结构和关键组成部分:
1. 基本打包结果
- Windows :生成一个
.exe
安装文件或直接可执行的文件夹(包含.exe
和依赖文件)。 - macOS :生成
.app
应用程序包(本质是一个特殊结构的文件夹)。 - Linux :生成
.deb
、.rpm
、AppImage
等格式的安装包或可执行文件。
2. 典型文件结构(以 macOS 的 .app
为例)
一个 .app
包内部的典型结构如下:
MyApp.app/
├── Contents/
│ ├── Info.plist // 应用配置信息(图标、版本等)
│ ├── MacOS/
│ │ └── MyApp // 主进程的可执行文件
│ ├── Resources/
│ │ ├── app.asar // 应用代码(打包为 asar 归档文件)
│ │ ├── electron.icns // 应用图标
│ │ └── ... // 其他静态资源(图片、字体等)
│ └── Frameworks/
│ └── ... // Electron 依赖的框架和库
3. 核心组成部分
(1) 主进程代码
- 位置 :在
Resources/app.asar
中(或解压后的Resources/app
目录)。 - 内容 :
- 主进程的 JavaScript 文件(如
main.js
)。 package.json
:定义入口文件、依赖、应用名称、版本等。- 其他主进程依赖的文件(如配置文件、Node.js 模块等)。
- 主进程的 JavaScript 文件(如
(2) 渲染进程代码
- 位置 :通常包含在
app.asar
中,与主进程代码一起打包。 - 内容 :
- HTML、CSS、JavaScript 文件(前端代码)。
- 前端依赖(如 React、Vue 编译后的静态文件)。
(3) 静态资源
- 位置 :
Resources/
目录或app.asar
内部。 - 内容:图片、字体、本地数据库文件等。
(4) Electron 运行时
- 位置 :
Frameworks/
目录(macOS)或同级依赖文件(Windows/Linux)。 - 内容:Chromium 和 Node.js 的二进制文件,确保应用独立运行。
4. ASAR 归档文件
-
作用 :将应用代码和资源打包为单个
app.asar
文件,避免文件散落。 -
特点:
-
只读归档,不能修改。
-
可以通过
asar
工具解压查看内容:bashnpm install -g asar asar extract app.asar ./unpacked
-
-
例外 :某些文件(如二进制模块)可能需要放在
app.asar.unpacked
中。
5. 不同打包工具的输出差异
electron-builder
-
默认生成安装包(如
.exe
、.dmg
、.deb
)。 -
配置文件
package.json
中的build
字段可定制输出:json"build": { "appId": "com.example.myapp", "files": ["dist/**/*", "node_modules/**/*"], "mac": { "target": "dmg" }, "win": { "target": "nsis" } }
electron-packager
- 生成可直接运行的应用程序文件夹(如
myapp-win32-x64
)。 - 需要手动分发或压缩为 ZIP。
6. 注意事项
- 依赖管理 :确保
node_modules
中的依赖正确打包(生产依赖 vs 开发依赖)。 - 二进制文件 :如果使用了原生模块(如
sqlite3
、ffi
),需确保它们针对目标平台编译。 - 配置文件 :检查
package.json
中的main
字段是否正确指向入口文件。 - 安全 :敏感代码应加密或混淆,因为
asar
文件可被轻易解压。
7. 示例(Windows 输出)
myapp/
├── myapp.exe // 主可执行文件
├── resources/
│ ├── app.asar // 应用代码和资源
│ └── ... // 其他依赖
├── locales/ // 语言文件
├── swiftshader/ // GPU 相关库
└── ... // Electron 运行时文件
通过理解打包后的文件结构,你可以更好地调试和优化 Electron 应用的发布流程。如果有特定需求(如自动更新、代码保护),需进一步配置打包工具或引入额外工具(如 electron-updater
、代码混淆工具)。