electron-test/eletron项目开发方案.md

136 lines
4.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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-<version>-<arch>.exe`
- 安装并运行验证:全屏展示且加载指定网页
### 8.2 Ubuntu 22 打包
- 在 Ubuntu 22 上执行:`npm ci`
- 执行打包:`npm run build:linux`
- 产物位置:
- `dist/WebShell-<version>-<arch>.AppImage`
- `dist/WebShell-<version>-<arch>.deb`
- 运行验证:
- `chmod +x dist/WebShell-<version>-<arch>.AppImage && ./dist/WebShell-<version>-<arch>.AppImage`
- 或安装 `deb``sudo dpkg -i dist/WebShell-<version>-<arch>.deb`
## 9. 安全与行为约束
- 保持 `nodeIntegration: false`,避免网页直接访问 Node 能力
- 使用 `contextIsolation: true``sandbox: true`,降低宿主风险
- 仅加载受信任站点;如需内网地址,将 `loadURL` 改为目标内网 URL
## 10. 常见问题与建议
- 跨平台打包建议在目标操作系统上本地打包Windows 在 WindowsLinux 在 Ubuntu
- 网络限制:如外网受限,改为内网地址;或将前端应用打包为本地资源并 `loadFile`
- Ubuntu 22 下 AppImage 运行异常:安装 `libfuse2`
- 无边框与更强锁定:可将 `fullscreen: true` 改为 `kiosk: true`
## 11. 后续迭代方向
- 启动参数或配置文件化:支持自定义 URL、窗口模式
- 预加载脚本与白名单通信:在受控场景中安全地与网页交互
- 自动更新:集成更新服务以便统一升级