使用 JavaScript,HTML 和 CSS 构建跨平台的桌面应用程序
Atom、Postman、Notion、Vscode等都是用Electron
开发的
1.创建文件并初始化
mkdir Hello-world && cd Hello-world npm init -y
记得修改入口文件,并在根目录创建入口文件 main.js
// package.json { ... "main": "main.js", ... }
2.安装electron
依赖
npm install --save-dev electron
3.在package.json
配置文件中的scripts
字段下增加一条start
命令
// package.json { "scripts": { "start": "electron ." } }
4.运行
npm start
5.空白是因为并没有任何内容,写个 HTML
<!-- index.html --> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Hello World!</title> </head> <body> <h1>Hello World!</h1> <p>Welcome to your Electron application.</p> </body> </html>
6.修改主入口main.js
代码
// 在文件头部引入 Node.js 中的 path 模块 const path = require('path') // app:控制应用程序事件生命周期的模块 // BrowserWindow:创建和管理应用程序窗口模块 const { app, BrowserWindow } = require('electron') function createWindow () { const mainWindow = new BrowserWindow({ width: 800, height: 600, webPreferences: { preload: path.join(__dirname, 'preload.js') } }) mainWindow.loadFile('index.html') // 打开开发工具 mainWindow.webContents.openDevTools() } // 在 Electron 中,只有在 app 模块的 ready 事件被激发后才能创建浏览器窗口 // 类似vue 的生命周期 将会在 Electron 结束后初始化 app.whenReady().then(() => { createWindow() // Mac 逻辑 关闭只是隐藏 command + Q 才完全退出 app.on('activate', function () { if (BrowserWindow.getAllWindows().length === 0) createWindow() }) }) // Windows 和 linux 关闭窗口会完全退出窗口 app.on('window-all-closed', function () { if (process.platform !== 'darwin') app.quit() })
# 克隆示例项目的仓库 git clone https://github.com/electron/electron-quick-start # 进入这个仓库 cd electron-quick-start # 安装依赖并运行 npm install && npm start
如果安装过慢可以设置淘宝源
最新淘宝源地址:
# Npm 设置淘宝源 npm config set registry https://registry.npmmirror.com/ # 检查是否修改成功 npm config get registry
使用淘宝源运行时如果提示这个错误
地址问题
throw new Error('Electron failed to install correctly, please delete node_modules/electron and try installing again')
则设置electron 镜像源地址
npm config set electron_mirror https://cdn.npm.taobao.org/dist/electron/
注意:图标格式 Windows 下使用的
icon.ico
Mac 使用的是icon.icns
使用electron-forge
安装
npm install --save-dev @electron-forge/cli npx electron-forge import
使用
npm run make
打包参数配置 package.json
文件里的config => forge => packagerConfig
使用electron-packager
安装
npm install --save-dev electron-packager
使用
npx electron-packager <sourcedir> <appname> --platform=<platform> --arch=<arch> [optional flags...]
具体参数:https://github.com/electron/electron-packager
用上面手动或者脚手架的方式创建初始化文件
修改 main.js
const { app, BrowserWindow, Menu } = require('electron') function createWindow() { const win = new BrowserWindow({ autoHideMenuBar: true, show: false, // 是否显示窗口,否后,通过对象.show()打开 fullscreen: false, }) /** * 优化加载方式 当页面在窗口中直接加载时,用户会看到未完成的页面, * 这不是一个好的原生应用的体验,使用此事件后显示窗口将没有视觉闪烁 */ win.on('ready-to-show', () => { win.show() }) //生成调试工具栏 // win.webContents.openDevTools() // 窗口最大化 win.maximize() // 加载远程URL(网址) win.loadURL('https://www.iyouhun.com/') // 设置菜单栏 const template = [ { label: '文件', submenu: [ { label: '关于', role: 'about', }, { label: '关闭', accelerator: 'Command+Q', click: () => { win.close() }, }, ], }, ] const menu = Menu.buildFromTemplate(template) Menu.setApplicationMenu(menu) } app.on('ready', createWindow) // Windows 和 linux 关闭窗口会完全退出窗口 app.on('window-all-closed', () => { if (process.platform !== 'darwin') { app.quit() } }) app.on('activate', () => { // Mac 逻辑 if (BrowserWindow.getAllWindows().length === 0) { createWindow() } })