本文由蘑菇街前端技术团队分享,原题“Electron 从零到一”,即时通讯网有修订和改动。
cover-opti.png (10.19 KB, 下载次数: 951)
下载附件 保存到相册
2 年前 上传
0.jpg (35.88 KB, 下载次数: 931)
本质上就是chromium(chrome开源版本)浏览器,有最新的东西都会在chromium测试,所以electron可以体验最新的api,这也是好处之一。
# 安装 create-react-app 命令,如果已将安装请忽略 npm install -g create-react-app # 创建 electron-react 项目 create-react-app electron-react # 启动项目 cd electron-react && npm start
... <div>hello world</div> ...
const {app, BrowserWindow} = require('electron') // 创建全局变量并在下面引用,避免被GC let win function createWindow () { // 创建浏览器窗口并设置宽高 win = new BrowserWindow({ width: 800, height: 600 }) // 加载页面 win.loadFile('./index.html') // 打开开发者工具 win.webContents.openDevTools() // 添加window关闭触发事件 win.on('closed', () => { win = null // 取消引用 }) } // 初始化后 调用函数 app.on('ready', createWindow) // 当全部窗口关闭时退出。 app.on('window-all-closed', () => { // 在 macOS 上,除非用户用 Cmd + Q 确定地退出, // 否则绝大部分应用及其菜单栏会保持激活。 if (process.platform !== 'darwin') { app.quit() } }) app.on('activate', () => { // 在macOS上,当单击dock图标并且没有其他窗口打开时, // 通常在应用程序中重新创建一个窗口。 if (win === null) { createWindow() } })
{ ... "main": "main.js", "scripts": "electron ." }
0_1.png (29.14 KB, 下载次数: 977)
0_3.png (31.6 KB, 下载次数: 946)
0_4.png (20.18 KB, 下载次数: 985)
0_5.png (13.9 KB, 下载次数: 1011)
app └─public └─index.html---------------入口文件 ├─main.js----------------------程序启动入口,主进程 ├─ipc--------------------------进程间模块 ├─appNetwork-------------------应用通信模块 └─src--------------------------窗口管理,渲染进程 ├─components---------------通用组件模块 ├─store--------------------数据共享模块 ├─statics------------------静态资源模块 └─pages----------------------窗口业务模块 ├─窗口A----------------窗口 └─窗口B----------------窗口
发送消息时,事件名称为 channel。回复同步消息时,需要设置 event.returnValue。 将异步消息发送回发送方,可以使用 event.reply(...),这个辅助方法将自动处理来自渲染进程的消息,然而 event.sender.send(...) 这个方法则始终将消息发送给主进程。
// 在主进程中 const { ipcMain } = require('electron') ipcMain.on('asynchronous-message', (event, arg) => { console.log(arg); // 输出 'ping' event.reply('asynchronous-reply', 'pong'); }) ipcMain.on('synchronous-message', (event, arg) => { console.log(arg) // 输出 ‘ping’ event.returnValue = 'pong' })
// 在渲染进程(网页)中 const { ipcRenderer } = require('electron') console.log(ipcRenderer.sendSync('synchronous-message', 'ping')) // 输出 'pong' ipcRenderer.on('asynchronous-reply', (event, arg) => { console.log(arg); // 输出 'pong' }) ipcRenderer.send('asynchronous-message', 'ping')
const { BrowserWindow } = require('electron').remote let win = new BrowserWindow({ width: 800, height: 600 }) win.loadUrl('https://www.mogu.com')
npm i electron-packager --save-dev
electron-packager <sourcedir> <appname> --platform=<platform> --arch=<arch> [optional flags...]
A complete solution to package and build a ready for distribution Electron, Proton Native or Muon app for macOS, Windows and Linux with “auto update” support out of the box.
npm i electron-builder --save-dev
{ "build": { "appId": "com.xxx.app", "extends": null, "files": [ "build/**/*" ], "mac": { "icon": "icons/icon.icns" }, "win": { "target": "nsis", "icon": "icons/icon.png" } } }
添加 scripts 命令 { "scripts": { "pack": "electron-builder" } }
Generated checksum for "electron-v6.0.2-darwin-x64.zip" did not match expected checksum。
2.png (28.44 KB, 下载次数: 1042)
"build": { ... + "public/main.js" ... }
const remote = require('remote') const app = remote.require('app') console.log(app.getAppPath());
3.png (33.36 KB, 下载次数: 974)
来源:即时通讯网 - 即时通讯开发者社区!
轻量级开源移动端即时通讯框架。
快速入门 / 性能 / 指南 / 提问
轻量级Web端即时通讯框架。
详细介绍 / 精编源码 / 手册教程
移动端实时音视频框架。
详细介绍 / 性能测试 / 安装体验
基于MobileIMSDK的移动IM系统。
详细介绍 / 产品截图 / 安装体验
一套产品级Web端IM系统。
详细介绍 / 产品截图 / 演示视频
精华主题数超过100个。
连续任职达2年以上的合格正式版主
为论区做出突出贡献的开发者、版主等。
Copyright © 2014-2024 即时通讯网 - 即时通讯开发者社区 / 版本 V4.4
苏州网际时代信息科技有限公司 (苏ICP备16005070号-1)
Processed in 0.109375 second(s), 38 queries , Gzip On.