Electron Angular 开发小记

一介绍

electron分为主进程和渲染进程,主进程负责和原生交互,控制窗口等。

渲染进程就是普通网页。主进程和渲染进程可以通过ipcMain(主进程使用)及ipcRenderer(渲染进程用)通信

quick-start中main.js为主进程入口文件

index.html为渲染进程入口文件

另外很重要的一点使用electron没有跨域限制!!!

二 打包

1.快速运行quick-start(开发时启动)

git clone https://github.com/electron/electron-quick-start
cd electron-quick-start
npm install && npm start

2.打包为用户可用文件(mac为.app win.exe)使用 electron-packager

npm install electron-packager --save-dev
npm install electron-packager -g
打包命令(在项目跟目录中)
electron-packager ./ --platform=darwin --asar --arch=x64 --overwrite --icon=imgs/logo.icns --version=1.2.4
--platform=darwin(打包mac系统)
--asar(将代码压缩为二进制文件防止代码泄漏)
--overwrite(替换原来存在的包)
--icon=imgs/logo.icns(包的图标地址)
--ignore node_modules(忽略文件,不打到包内)--version=1.2.4(打包electron为1.2.4版本的包)

三.模块介绍

1.渲染进程与主进程通信

渲染进程引入ipcRenderer模块 主进程引入ipcMain模块,渲染进程通过自定义事件调用主进程的方法如下

//渲染进程
//其中create-folder是事件名,1111是传给主进程的数据
var  ipcRenderer  = require(‘electron‘).ipcRenderer;
ipcRenderer.send(‘create-folder‘, ‘1111‘);

//渲染进程发送完事件后需要监听住进程回的事件
ipcRenderer.on(‘create-folder-result‘, function(event, data) {
  console.log(data)//222
}

//主进程
const { ipcMain} = require(‘electron‘);//es6结构赋值写法
//主进程监听事件
ipcMain.on(‘create-folder‘, function(event, data) {
	...//主进程干的活
console.log(data)//1111
  event.sender.send(‘create-folder-result‘,‘222‘);//主进程干完活后告诉渲染进程
});

2.菜单 

首先制定菜单模版

let template = [{
        label: ‘编辑‘,
        submenu: [{
            label: ‘撤销‘,
            accelerator: ‘CmdOrCtrl+Z‘,
            role: ‘undo‘
        }, {
            label: ‘剪切‘,
            accelerator: ‘CmdOrCtrl+X‘,
            role: ‘cut‘
        }, {
            label: ‘复制‘,
            accelerator: ‘CmdOrCtrl+C‘,
            role: ‘copy‘
        }, {
            label: ‘粘贴‘,
            accelerator: ‘CmdOrCtrl+V‘,
            role: ‘paste‘
        }]
    }, {
        label: ‘显示‘,
        submenu: [{
            label: ‘进入全屏幕‘,
            accelerator: (function() {
                if (process.platform === ‘darwin‘) {
                    return ‘Ctrl+Command+F‘
                } else {
                    return ‘F11‘
                }
            })(),
            click: function(item, focusedWindow) {
                if (focusedWindow) {
                    focusedWindow.setFullScreen(!focusedWindow.isFullScreen())
                }
            }
        }, {
            label: ‘开发者工具‘,
            accelerator: (function() {
                if (process.platform === ‘darwin‘) {
                    return ‘Alt+Command+I‘
                } else {
                    return ‘Ctrl+Shift+I‘
                }
            })(),
            click: function(item, focusedWindow) {
                if (focusedWindow) {
                    focusedWindow.toggleDevTools()
                }
            }
        }, {
            type: ‘separator‘
        }]
    }, {
        label: ‘窗口‘,
        role: ‘window‘,
        submenu: [{
                label: ‘最小化‘,
                accelerator: ‘CmdOrCtrl+M‘,
                role: ‘minimize‘
            }

        ]
    }

]

//然后在ready中调用以下两个api

app.on(‘ready‘, function() {
    const menu = Menu.buildFromTemplate(template)
    Menu.setApplicationMenu(menu)
})

  

3.和c++混用

由于js调用系统的功能有限,electron也不可能封装所有我们需要的组件,所以我们采用和c++混合开发的方式。将c++代码编译为.node二进制文件提供一些调用系统功能的能力。node自带模块addons可以将c++转为.node,但是版本兼容性不好。我们采用nan包来编译c++代码。遇到以下两个问题。

1.将c++编译为.node文件的电脑node版本需要和electron版本对应。但是有时候node版本和electron的版本相同也会报不匹配。我用了electron两个版本(0.37.8对应node 5.10.0,1.2.4对应node 6.9.0)

2.c++代码出错会将electron进程干死,electron直接白屏。实践证明此类问题都是因为c++出错导致的。

四.调试  

1.渲染进程调试

打开谷歌开发者工具,剩下的和谷歌调试一样一样的。

mainWindow.webContents.openDevTools(); 

2.主进程node调试

electron-inspector

1.npm install electron-rebuild --save-dev
2.npm install electron-inspector --save-dev
3.启动electron
electron --debug=5858 ./app(app路径)
4.根路径启动electron-inspector(注:第一次使用或更改electron 版本会先编译一下)
node_modules/.bin/electron-inspector(mac)
node_modules\\.bin\\electron-inspector(win)

启动完成后命令行中打印如下
Visit http://127.0.0.1:8080/?port=5858 to start debugging.
5.谷歌浏览器起中访问http://127.0.0.1:8080/?port=5858 就可以愉快的调试了

  

 未完待续。。。

时间: 2024-12-24 14:14:29

Electron Angular 开发小记的相关文章

IOS开发小记

1. 在view之间添加分割线的注意 第一种情况没有什么特别的,view之前是独立的,没有位置重合的情况. 第二中有重合区域,这里要注意的是,在iPad下如果分割线的宽度设置小于1,会出现显示在view进去视图的时,闪现一下,然后不可见. IOS开发小记,布布扣,bubuko.com

解码器开发小记-实车测试篇

解码器产品研发 实车测试是解码器产品开发的重点环节, 从某种程度上来看实车验证的工作基本上能看出整一个解码器公司的研发水平. 1. 整个解码器公司在对市场资源和研发进度调配的一个可见验收指标. 车源数量.测试条件能否达标,是出差能否达成既定计划的两个基本要素. 通俗的讲, 能否找到未来市场和现有市场需求的车源从而使自身产品在推出之时就能达到市场价值预期, 是评测车辆资源是否合格的唯一标准. 2. 研发管理实力的直接体现. 不同体系的解码器公司对于实车测试的工作步骤大径相庭, 不论哪种开发模式,

NodeJS+Express+MySQL开发小记(2):服务器部署

http://borninsummer.com/2015/06/17/notes-on-developing-nodejs-webapp/ NodeJS+Express+MySQL开发小记(1)里讲过在本地搭建 NodeJS 网站的若干细节.本人最近在阿里云服务器上面按最低配租了4个月的云服务器,所以想试着把这个项目部署到云上.云服务器操作系统是Ubuntu 14.04 LTS.之前一直在Windows下做开发,对于Linux下的环境搭建.配置还不是很熟悉,搭建的过程中学到很多东西. 本文简单记

angular开发中的两大问题

一.在我们的angular开发中,会请求数据但轮播图等...在请求过数据后他的事件和方法将不再执行: 看我们的解决方案一: app.controller("text",function($scope,$http,$timeout){ $http.get("http://127.0.0.1:3333/huoqu").success(function(data){ $scope.shuju=data.img $timeout(function(){ //在请求完成时,强

cocos2d-x 3.2 开发小记

//入口应用 AppDelegate applicationDidFinishLaunching() applicationDidEnterBackground() applicationWillEnterForeground() cocos2d-x 3.2 开发小记

Angular 开发环境搭建

Angular 开发环境搭建 1 安装node.js 可以直接去官网https://nodejs.org/en/ 下载: 目的:使用npm 管理项目依赖的软件包: 在cmd 中敲入 npm –version 查看版本号看是否安装成功 2 由于 npm 会自动访问海外的服务器,由于网络的原因,可以使用cnpm yarn 作为替代的包管理工具: cnpm 是淘宝发布的一款工具,会自动把 npm 上面的所有包定时同步到国内的服务器上来,cnpm 本身也是一款 NodeJS 模块. http://npm

带农历日历的DatePicker控件!Xamarin控件开发小记

原文:带农历日历的DatePicker控件!Xamarin控件开发小记 闲来无事开发了个日期选择控件,感兴趣的同学前往: https://github.com/MatoApps/Mato.DatePicker Mato.DatePicker 说明 这是一个带有农历日历的日期选择Xamarin控件 可以指定初始日期 多选和单选日期 引用 PCL:https://www.nuget.org/packages/Mato.DatePicker.PCL/ Android:https://www.nuget

小程序云开发小记

小程序云开发小记 现在云开发是越来越火了,刚好最近在做一个小程序云开发的项目,就记录一下心得和遇到的问题! ?? 小程序云开发与普通的开发有什么区别? 最大的区别就是把数据库搬到了云上,而且可以让前端直接操作数据库,让前端开发者某种意义上成为了全栈工程师! ?? 云开发新增了两个关键的知识点:云函数 和 云数据库操作. 云函数 云函数, 顾名思义:就是放到云服务器上的函数,然后小程序可以通过wx.cloud.callFunction的方法调用,非小程序端,也可以通过http请求调用云函数. 云函

C#学习(九)之Windows Store App & WP 开发小记(一)

由于课程已经讲述完毕,所以本次学习记录就讨论记录一下我在Windows Store App & WP开发中遇到的一些问题与收获. 一.数据库(Sqlite)的使用 虽然资料很难找,但sqlite在这两个平台的使用还是很简单的. 首先是环境配置阶段: 1.工具->拓展与更新->联机,然后在右上搜索sqlite,之后下载安装下图两个打勾的拓展包,注意要重启VS方才生效. 2.项目->管理NuGet程序包->联机,搜索sqlite,安装下图打勾内容,如果项目多出下图两个文件即安装