用Electron打造跨平台APP
2020-03-11 17:32
288 查看
关于electron
Electron是由Github开发,用HTML,CSS和JavaScript来构建跨平台桌面应用程序的一个开源库。 Electron通过将Chromium和Node.js合并到同一个运行时环境中,并将其打包为Mac,Windows和Linux系统下的应用来实现这一目的,下面直接上代码。
基础代码
源码地址: electron-demo
基础目录结构
electron-demo/
├── app
├─── index.html
├─── icon.icns
├── package.json
├── main.js
package.json 跟常规 Node 程序一样,将 main.js 作为 程序的启动入口文件
{ "name": "electron-demo", "version": "1.0.0", "description": "测试electron打包以及跟html5通信", "main": "main.js", "scripts": { "start": "electron .", "packager:os": "electron-packager ./ XXX教师端-非官方 --platform=darwin --out ./outApp --overwrite --icon=./app/icon.icns", "packager:win64": "electron-packager ./ XXX教师端-非官方 --platform=win32 --arch=x64 --out ./outApp --overwrite --icon=./app/icon.icns" }, "author": "lfourg", "license": "CC0-1.0", "devDependencies": { "electron": "^8.1.1", "electron-packager": "^14.2.1" } }
main.js内容如下
const { app, BrowserWindow, Menu, ipcMain } = require('electron') const path = require('path') function createWindow () { // 创建窗口 const mainWindow = new BrowserWindow({ width: 800, height: 600, frame: false, webPreferences: { nodeIntegration: true } }) // 加载Hmtl5页面 mainWindow.loadFile('app/index.html') // 打开DevTools mainWindow.webContents.openDevTools() //添加菜单 const dockMenu = Menu.buildFromTemplate([ {label: '新窗口', click () { console.log('新窗口') } }, { label: '设置', submenu: [ { label: '静音' },{ label: '关闭' }] } ]) app.dock.setMenu(dockMenu) //注册渲染线程 屏幕最大化事件 ipcMain.on('windowFullScreen', e => mainWindow.setFullScreen(true) ) //注册渲染线程 屏幕还原事件 ipcMain.on('windowNormal', e => mainWindow.setFullScreen(false) ) //注册渲染线程 应用退出事件 ipcMain.on('quitWindow', e => app.quit() ) } app.on('ready', createWindow) // Quit when all windows are closed. app.on('window-all-closed', function () { // On macOS it is common for applications and their menu bar // to stay active until the user quits explicitly with Cmd + Q if (process.platform !== 'darwin') app.quit() }) app.on('activate', function () { // On macOS it's common to re-create a window in the app when the // dock icon is clicked and there are no other windows open. if (BrowserWindow.getAllWindows().length === 0) createWindow() })
html5 app/index.html页面
<script> //主要方便在html5页面中访问electron对象 window.electron = require('electron') </script> <div id=app></div>
渲染进程与主进程的通信,html5中部分代码片段
window.electron.ipcRenderer.send('windowFullScreen') //窗口最大化 window.electron.ipcRenderer.send('quitWindow') //退出应用
html5中在线、离线检测
const alertOnlineStatus = () => { window.alert(navigator.onLine ? 'online' : 'offline') } window.addEventListener('online', alertOnlineStatus) window.addEventListener('offline', alertOnlineStatus)
打包
例子中使用electron-packager来打包 Electron 应用,生成各个平台的最终可运行文件
使用命令
electron-packager <sourcedir> <appname> --platform=<platform> --arch=<arch> [optional flags...] 参数说明
- <sourcedir>: 项目的位置
- <appname>: 应用名
- platform=<platform>: 打包的系统(darwin、win32、linux)
- arch=<arch>: 系统位数(ia32、x64)
- icon=<icon>: 指定应用的图标(Mac 为 .icns 文件,Windows 为 .ico 或 .png)
- out <out>: 指定输出的目录
- version=<version>: 指定编译的 electron-prebuilt 版本
我们可以直接在 package.json 的 script 字段中添加脚本
"scripts": { "start": "electron .", "packager:os": "electron-packager ./ XXX教师端-非官方 --platform=darwin --out ./outApp --overwrite --icon=./app/icon.icns", "packager:win64": "electron-packager ./ XXX教师端-非官方 --platform=win32 --arch=x64 --out ./outApp --overwrite --icon=./app/icon.icns" }
然后通过以下命令执行打包
npm run-script packager:os
小结
- 不要以为一个系统可以打包所有系统的版本,MacBook打包darwin平台非常顺利,打包win版本各种报错,按提示安装wine还在研究中
- 方便渲染线程与主线程通信,在Html5首页添加 window.electron = require('electron')来访问electron 我觉得是初学者使用最便捷的方式
相关文章推荐
- [案例分享] 茂迪公司一次打造跨平台 App 实时掌握生产线信息
- 'DeviceOne'技术跨平台App开发-最简单的app开发工具
- 带你从零学ReactNative开发跨平台App开发[react native SqlLite 终极运用](十二)
- 5分钟帮你打造一个快速启动的app(app启动分析与优化)
- 从零开始打造一个新闻订阅APP之Android篇(二、从“逛”页面谈谈多种格式listview的实现细节)
- [译]使用MVI打造响应式APP(六):恢复状态
- 第三百七十五节,Django+Xadmin打造上线标准的在线教育平台—创建课程机构app,在models.py文件生成3张表,城市表、课程机构表、讲师表
- 实例教程 - 使用 NativeScript 和 Angular2 构建跨平台 APP
- 第三百八十节,Django+Xadmin打造上线标准的在线教育平台—将所有app下的models数据库表注册到xadmin后台管理
- 一个小时打造新闻app
- ZEGO教程:如何通过electron构建桌面跨平台音视频应用
- 小白学phoneGap《构建跨平台APP:phoneGap移动应用实战》连载二(生命周期)
- 小白学phoneGap《构建跨平台APP:phoneGap移动应用实战》连载三(通过实例来体验生命周期)
- 手机APP游戏的发展前景分析 如何实现跨平台
- 【转】几款移动跨平台App开发框架比较
- 使用RxJava+Retrofit+MVP+Dagger2+Glide+GreenDao打造的新闻资讯APP
- 用HTML5技术打造跨平台大型网游
- 跨平台移动APP开发进阶(三)hbuilder+mui mobile app 开发心酸路
- App打造自定义的统计SDK, 是时候和友盟说分手了
- RAD Studio XE8跨平台实现APP中的录音、录像功能