当前位置: 首页 > 后端技术 > Node.js

阳光恰好是Electron今天的出发

时间:2023-04-04 00:59:41 Node.js

阳光恰好是Electron今天的出发Thanks,cometohappy.首先,让我问你几个问题。什么是电子?电子是做什么用的?写个todo看看怎么玩?如何实现桌面程序,概念意义,底层技术是什么?第一步是如何安装。首先,我们的选择可以节省开发依赖。npminstallelectron--save-dev也可以全局安装。npminstallelectron-g这里是文档翻译。如果有趣的话,Electron允许您使用纯JavaScript调用丰富的Native(操作系统)API来创建桌面应用程序。您可以将其视为专注于桌面应用程序而非Web服务器的Node.js变体。这并不意味着Electron是带有(GUI)库绑定的JavaScript。相反,Electron使用网页作为其GUI,因此您可以将其视为由JavaScript控制的精简版Chromium浏览器。awesome的第二步是理解基本概念。Electron分为主进程和渲染进程。主进程运行package.json的主脚本,称为主进程。在主进程中运行的脚本将通过创建网页来显示GUI。(这让我想起了做python和java时gui主线程的感觉。。。)Electron的网页运行在一个成为渲染进程的进程中。并获得页面和操作系统之间的一些低级交互主进程渲染进程区别主进程使用BrowserWindow实例创建页面,每个BrowserWindow实例在自己的渲染进程中运行页面。当一个BrowserWindow实例被销毁时,相应的渲染进程也将被终止。渲染进程相互独立,由主进程管理。渲染进程只需要关心自己的页面。无法在网页内执行GUI操作。需要对应的渲染进程与主进程进行通信。通信方式1、使用HTML5API,如storageAPI、localstorage、sessionstorage或IndexedDB2,IPC通信(ipcRenderer和ipcMain)3、RPC通信(远程模块)下面介绍一个todolist的实现,从编码开始。它控制类似于package.json的文件。主线程由main定义的入口文件创建。以下是不完整的代码。大约。如果需要完整代码,可以查看github地址。todolist项目目录大概是todo--addWindow.html--main.js--package.json--window.html入口文件就是我们的main.js,它是一个应用程序中的中央调度器。//模块可以像使用nodejs一样导入//这就是所谓的主进程,它看起来像一个nodejs脚本constelectron=require('electron');consturl=require('url');constpath=require('path');const{app,BrowserWindow,Menu,ipcMain}=electron;//设置环境process.env.NODE_ENV='production';letmainWindow;letaddWindow;//监听app准备就绪app.on('ready',function(){//1.创建一个新窗口mainWindow=newBrowserWindow({});//加载html到窗口mainWindow.loadURL(url.format({pathname:path.join(__dirname,'window.html'),protocol:'file:',//protocolslashes:true}));//file:/dirname/mainWindow.html//6.大窗口关闭整个程序,关闭mainWindow.on('close',function(){app.quit();})//2.设置菜单constmainMenu=Menu.buildFromTemplate(mainMenuTemplate);Menu.setApplicationMenu(mainMenu);})//处理创建添加窗口函数createAddWindow(){//5.新窗口addWindow=newBrowserWindow({width:300,height:200,title:'添加TODO列表项'});//lo将html广告添加到窗口中//垃圾回收addWindow.on('close',function(){addWindow=null;})}//7.抓取子窗口ipcitem:add//IPC通信ipcMain.on('item:add',function(e,item){console.log('item');mainWindow.webContents.send('item:add',项目);addWindow.close();});constmainMenuTemplate=[{label:'File',submenu:[//3.设置子菜单{label:'AddItem',click(){//4.新窗口createAddWindow();}},{label:'ClearItems',click(){mainWindow.webContents.send('item:clear');}},{label:'Quit',accelerator:process.platform=='darwin'?'Commond+Q':'Ctrl+Q',//os版本区分快捷键click(){app.quit();}}]}];//如果是mac,添加空对象到menuif(process.platform=='darwin'){mainMenuTemplate.unshift({});}//区分开发环境if(process.env.NODE_ENV!=='production'){//添加devtoolsmainMenuTemplate.push({label:'Developertools',submenu:[{role:'reload'},{label:'ToggleDevTools',accelerator:process.platform=='darwin'?'Commond+I':'Ctrl+I',//os版本区分快捷键,click(item,focusedWindow){//区分点击窗口focusedWindow.toggleDevTools();}}]});}主要流程是设置ipc通讯端口监听渲染过程对应事件addWindow.html

addItem
constelectron=require('electron');const{ipcRenderer}=电子;constform=document.querySelector('form');form.addEventListener('submit',function(e){e.preventDefault();//console.log(123);constitem=document.querySelector('#item');ipcRenderer.send('item:add',item.value);//使用ipc进行通信})主进程渲染页面
<脚本>constelectron=require('electron');const{ipcRenderer}=电子;constul=document.querySelector('#mainContainer');ipcRenderer.on('item:add',function(e,item){ul.className='collection';constli=document.createElement('li');li.className='collection-item';constitemText=document.createTextNode(item);li.appendChild(itemText);//constli=''+item+'';ul.appendChild(li);//ul.innerHTML=ul.innerHTML+li;})//清除项目ipcRenderer.on('item:clear',function(e){ul.innerHTML='';//if(ul.clildren.length==0){ul.className='';//}})//通过双击删除项目ul.addEventListener('dblclick',function(e){e.target.remove();//console.log(ul.clildren.length);if(ul.children.length==0){ul.className='';}})demo总结大概可以看懂可以使用node模块渲染接口可以使用网页渲染了解进程间通信,debug调试渲染过程,渲染调试可以通过webContent的openDevToolapi打开,调试网页const{BrowserWindow}=require('electron')letwin=newBrowserWindow()win.webContents.openDevTools()主进程调试命令行开关--inspect=[port]监控V8引擎中有关端口的调试器协议信息--inspect-brk=[port]与--inspector相同,但会在第一行JavaScript脚本暂停运行外部调试器通过访问chrome://inspect连接到Chrome,然后选择要在那里检查的Electron应用程序。使用VSCode调试主进程(感觉有点像传统的在浏览器里调试nodejs)chromium结合了chromium,所以我们也可以在我们的渲染过程中使用HTML5的新特性,比如离线通知,离线缓存等。总结Electron是一个可以使用JavaScript、HTML和CSS构建桌面应用程序的库。可以兼容多终端(一套代码)Chromium、Node.js,以及调用操作系统本地函数的API。无缝使用节点。文中的一些链接。Todo示例代码electrongithub地址electron中文文档可以在这些地方找到http://zwk.lifegmail:a2FuZzk1NjMwQGdtYWlsLmNvbQ==QQ邮箱:OTA3NzQ3ODc0QHFxLmNvbQ==githubZWkang题外话这篇文章写的比较早,有些不妥之处还是希望大家指正理解(2017年)。有任何疑问欢迎讨论。