# Electron 项目开发方案 ## 1. 项目目标 - 使用 Electron 开发一个桌面“框架程序” - 主程序启动后自动打开指定 Web 应用(示例:`https://www.baidu.com`) - 程序窗口自动全屏并隐藏菜单栏 - 支持在 Windows 与 Ubuntu 22 上打包与运行 ## 2. 技术栈与工具 - 核心:`Electron` - 打包:`electron-builder` - 运行环境:`Node.js LTS`(建议 18 或 20) - 版本管理:`npm` ## 3. 环境准备 - 通用:安装 Node.js LTS - Windows:建议安装 Git;如需原生模块构建,安装 Visual Studio Build Tools - Ubuntu 22: - `sudo apt update` - `sudo apt install -y build-essential libarchive-tools rpm xz-utils libfuse2` ## 4. 目录结构(最小可运行) ``` 项目根目录/ ├─ main.js └─ package.json ``` ## 5. 初始化步骤 - 在项目根执行: - `npm init -y` - `npm i -D electron electron-builder` - 准备主进程入口文件 `main.js` 与打包配置 `package.json` ## 6. 核心实现 ### 6.1 主进程入口:`main.js` ```js const { app, BrowserWindow } = require('electron') function createWindow() { const win = new BrowserWindow({ fullscreen: true, autoHideMenuBar: true, webPreferences: { contextIsolation: true, nodeIntegration: false, sandbox: true } }) win.loadURL('https://www.baidu.com') } app.whenReady().then(() => { createWindow() app.on('activate', () => { if (BrowserWindow.getAllWindows().length === 0) createWindow() }) }) app.on('window-all-closed', () => { if (process.platform !== 'darwin') app.quit() }) ``` ### 6.2 打包与运行配置:`package.json` ```json { "name": "electron-webshell", "version": "0.1.0", "main": "main.js", "private": true, "scripts": { "start": "electron .", "build": "electron-builder", "build:win": "electron-builder --win", "build:linux": "electron-builder --linux" }, "devDependencies": { "electron": "^31.2.0", "electron-builder": "^24.9.4" }, "build": { "appId": "com.example.webshell", "productName": "WebShell", "files": [ "main.js", "package.json" ], "win": { "target": ["nsis"], "artifactName": "${productName}-Setup-${version}-${arch}.exe" }, "linux": { "target": ["AppImage", "deb"], "category": "Utility", "artifactName": "${productName}-${version}-${arch}.${ext}" } } } ``` ## 7. 开发与调试 - 启动开发模式:`npm start` - 验证:程序启动后是否全屏、是否自动打开 `https://www.baidu.com` ## 8. 打包与发布 ### 8.1 Windows 打包 - 在 Windows 上执行:`npm run build:win` - 产物位置:`dist/WebShell-Setup--.exe` - 安装并运行验证:全屏展示且加载指定网页 ### 8.2 Ubuntu 22 打包 - 在 Ubuntu 22 上执行:`npm ci` - 执行打包:`npm run build:linux` - 产物位置: - `dist/WebShell--.AppImage` - `dist/WebShell--.deb` - 运行验证: - `chmod +x dist/WebShell--.AppImage && ./dist/WebShell--.AppImage` - 或安装 `deb`:`sudo dpkg -i dist/WebShell--.deb` ## 9. 安全与行为约束 - 保持 `nodeIntegration: false`,避免网页直接访问 Node 能力 - 使用 `contextIsolation: true` 与 `sandbox: true`,降低宿主风险 - 仅加载受信任站点;如需内网地址,将 `loadURL` 改为目标内网 URL ## 10. 常见问题与建议 - 跨平台打包:建议在目标操作系统上本地打包(Windows 在 Windows,Linux 在 Ubuntu) - 网络限制:如外网受限,改为内网地址;或将前端应用打包为本地资源并 `loadFile` - Ubuntu 22 下 AppImage 运行异常:安装 `libfuse2` - 无边框与更强锁定:可将 `fullscreen: true` 改为 `kiosk: true` ## 11. 后续迭代方向 - 启动参数或配置文件化:支持自定义 URL、窗口模式 - 预加载脚本与白名单通信:在受控场景中安全地与网页交互 - 自动更新:集成更新服务以便统一升级