内容简介:最近用React + Electron开发了一个RSS阅读器,开源在:以普通的React应用做基础,一步步初始化项目。预先安装yarn工具,用创建项目后,大致的目录结构如下:
最近用React + Electron开发了一个RSS阅读器,开源在: github.com/breeze2/bre… ,这里记录一下大致的开发过程。
初始化
创建项目
以普通的React应用做基础,一步步初始化项目。预先安装yarn工具,用 yarn
来创建一个React应用项目,假设名字叫 demo
,再引入Electron依赖。
$ cd /PATH/TO/PROJECTS $ yarn create react-app YOUR_APP_NAME $ cd /PATH/TO/PROJECTS/YOUR_APP_NAME $ yarn add electron --dev 复制代码
配置入口文件
创建项目后,大致的目录结构如下:
|-->demo |-->node_modules |--... |-->public |--index.html |--... |-->src |--package.json |--... 复制代码
一般来说,React应用(测试环境下)的入口文件就是 public/index.html
,而Electron应用的入口文件最好也放在 public
目录下,并命名为 electron.js
(这样 electron-builder 可以自动识别)。
先在 package.json
中lectron应用的入口文件,添加 main
配置:
{ ... "main": "public/electron.js", ... } 复制代码
public/electron.js
代码:
const { app, BrowserWindow } = require('electron') const path = require('path') let mainWindow function createWindow() { mainWindow = new BrowserWindow({ width: 960, height: 600, }) mainWindow.loadFile('index.html') mainWindow.webContents.openDevTools() mainWindow.on('closed', function () { mainWindow = null }) } app.on('ready', createWindow) app.on('window-all-closed', function () { if (process.platform !== 'darwin') { app.quit() } }) app.on('activate', function () { if (mainWindow === null) { createWindow() } }) 复制代码
在执行执行 yarn electron ./
命令就可以启动Electron应用了,不过React应用还没启动起来。
启动应用
一般用 yarn react-scripts start
命令,就可以将React应用挂载在本地3000端口上( http://localhost:3000 ),用于开发调试。要用React结合Electron一起开发调试,先安装 electron-is-dev 来识别当前是否开发环境。
$ yarn add electron-is-dev 复制代码
一般开发环境是加载 http://localhost:3000/
,正式环境是加载 ../build/index.html
文件,所以修改 public/electron.js
代码( createWindow
函数内):
const isDev = require('electron-is-dev') ... -- // mainWindow.loadFile('index.html') ++ if (isDev) { ++ mainWindow.loadURL('http://localhost:3000/') ++ } else { ++ mainWindow.loadFile(path.join(__dirname, '/../build/index.html')) ++ } ... 复制代码
然后,在项目目录下,打开两个终端,一个执行 yarn react-scripts start
,一个执行 yarn electron ./
,就可以开发调试React + Electron应用了。 不用羡慕 electron-vue ,可以一句命令可以直接启动,其实原理是一样的。 要实现一句命令启动也不难,只要把两句命令合到一起执行就可以了。先安装 工具 库:
$ yarn add concurrently --dev $ yarn add wait-on --dev 复制代码
修改 package.json
,添加一个 electron-dev
脚本命令:
{ ... "scripts": { ... "electron-dev": "concurrently \"BROWSER=none react-scripts start\" \"wait-on http://localhost:3000 && electron .\"", ... } ... } 复制代码
这样,执行一句 yarn electron-dev
就可以启动React + Electron应用了。
JS运行时
一般来说,浏览器提供一种JS运行时,NodeJS提供另一种JS运行时,Electron则是将这两种运行时结合到一起来提供。不过,这两种运行时并不是完美地和睦相处,比如说使用webpack时,通过webpack打包的JS代码中,不能直接通过 import
关键字或者 require
函数来引入NodeJS提供的功能接口,因为webpack覆盖了NodeJS自带的 require
函数。 不过Electron中, window
对象的 require
属性会映射到NodeJS自带的 require
函数上,比如要调用NodeJS提供的http接口,可以这样写:
const http = window.require('http') 复制代码
重新编译NodeJS扩展
通常,纯JS代码实现的工具库都可以在Electron环境中运行。不过有些NodeJS的工具库并不是纯JS代码实现的,比如 node-sqlite3 。 node-sqlite3
是C++编写,算是NodeJS的扩展,而不是单纯的工具库。 node-sqlite3
需要针对Electron环境重新编译,才能在Electron环境中运行。
electron-rebuild
electron-rebuild 是专门Electron环境针对重新编译NodeJS扩展的一个工具。 在项目目录下,安装electron-rebuild:
$ yarn add electron-rebuild --dev 复制代码
比如,重新编译node-sqlite3,只需要:
$ yarn electron-rebuild -f -w sqlite3 复制代码
在MacOS系统上就是这么简单,在Windows系统就复杂一些。
Windows系统上重新编译NodeJS扩展
在Windows系统上也一样可以使用electron-rebuild工具,但必须预先配置好编译环境。
首先,安装window编译工具:
$ npm install --global --production windows-build-tools $ npm config set msvs_version 2017 复制代码
然后,下载并安装 Python 2,必须Python2不能Python3,如果同时安装了Python2和Python3,须给 npm
指定Python2可执行文件路径,避免调用了Python3:
$ npm config set python /path/to/executable/python2 复制代码
这样,才能在Windows系统上调用electron-rebuild。如果electron-rebuild执行过程中,遇上 CONNECT ERROR
可能是网络问题,可以换成淘宝源再试试。
所以尽量少用NodeJS扩展,可以免去跨平台时重新编译的麻烦。
应用打包
应用开发完成后,需要打包成 dmg
或 exe
等安装文件,可以使用electron-builder
electron-builder
electron-builder有很多配置选项,来调用各式各样的程序打包。这里只简单介绍一下MacOS系统安装程序和Windows系统NSIS安装程序的打包配置(NSIS是一个开源的 Windows 系统下安装程序制作工具)。
修改 package.json
,添加 build
配置:
{ ... "homepage": "./", // 因为最后React应用引用的JS、CSS等资源都是本地的,只要用当前的相对路径即可 "build": { "appId": "com.xxx.app", // 应用ID "npmRebuild": true, // 打包前是否重新编译NodeJS扩展 "mac": { "category": "news", // 应用分类 "icon": "build/icon.png" // 应用icon路径 }, "win": { "icon": "build/icon.png", // 应用icon路径 "target": "nsis" // Windows安装文件的目标类型 }, "nsis": { "allowToChangeInstallationDirectory": true, // 是否允许修改安装路径 "allowElevation": false, // 是否允许提升权限 "createDesktopShortcut": true, // 是否创建桌面快捷方式 "menuCategory": true, //是否在菜单栏创建分类 "oneClick": false // 是否一键安装 }, "files": [ "build/**/*" // 引入的文件 ] } ... } 复制代码
然后,就可以打包Electron应用了:
$ yarn react-scripts build // 先用webpack打包React应用到`build`目录下 $ yarn eletron-builder // 再用eletron-builder打包Electron应用 复制代码
当然,正式打包还需要代码签名,还有更多配置,请查看 electron-builder配置说明 。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
C++程序设计语言
Bjarne Stroustrup / 裘宗燕 / 机械工业出版社 / 2010-3-1 / 99.00元
本书是在C++语言和程序设计领域具有深远影响、畅销不衰的著作,由C++语言的设计者编写,对C++语言进行了最全面、最权威的论述,覆盖标准C++以及由C++所支持的关键性编程技术和设计技术。本书英文原版一经面世,即引起业内人士的高度评价和热烈欢迎,先后被翻译成德、希、匈、西、荷、法、日、俄、中、韩等近20种语言,数以百万计的程序员从中获益,是无可取代的C++经典力作。 在本书英文原版面世10年......一起来看看 《C++程序设计语言》 这本书的介绍吧!