React + Electron封裝並打包成桌面應用
Electron是什麼
Electron 是一個由 GitHub 開發的開源庫,通過將 Chromium) 和Node.js 組合並使用 HTML,CSS 和 JavaScript 進行構建 Mac,Windows,和 Linux 跨平臺桌面應用程式。
原理:
nodejs:
如果你不知道 node.js,那還等什麼快戳這裡,看一看世界上最溫柔可愛的語言。它藉助於 Google 的 V8 引擎,Node.js 是一個能夠在伺服器端執行 JavaScript 的開放原始碼、跨平臺 JavaScript 執行環境,更多解釋請戳維基百科。
Chromium:
Chromium 或許你沒聽說過,但是你一定聽說過 chrome 吧!Chromium 是 Google 的開源瀏覽器,是 chrome 背後的那個不太穩定更新快的兄弟版,詳情
組合:
Electron 建立的應用使用網頁作為其 GUI ,因此你可以將其當成由 JavaScript 控制的迷你精簡版Chromium 瀏覽器。也可以將 Electron 當成 node.js 變體,只不過它更專注於桌面應用而非 Web 伺服器。在 Electron 中, 把 package.json
中設定的 main
指令碼的所在程序稱為 主程序。這個程序中執行的指令碼也可通過建立網頁這種方式來展現其 GUI。 因為 Electron 是通過 Chromium 來顯示頁面,所以 Chromium 自帶的多程序架構也一同被利用。這樣每個頁面都執行著一個獨立的程序,它們被統稱為 渲染程序
優缺點?
總之,優點肯定大於缺點。
優點:
方便快捷的開發桌面應用,跨平臺,對前端開發者友好,活躍的社群,豐富的api......
缺點:
效能肯定比不上原生的桌面應用,釋出的包貌似有一點點大。
OK,接下來開始.........................................................
一、快速建立react專案
首先安裝好GIT和nodejs,安裝好nodejs同時也安裝好了npm
這是使用Facebook開發的reate-react-app 來快速建立一個 react 專案(,命名為react-electron)。
# 安裝 create-react-app 命令,如果已將安裝請忽略
npm install -g create-react-app
# 建立 react專案
create-react-app react-electron
# 啟動專案( create-react-app 真的超級方便啊)
cd react-electron && npm start
npm start之後瀏覽器會自動開啟網址 http://localhost:3000/ ,出現react專案的頁面了
二、安裝Electron
#在react-electron專案目錄下
npm install -save electron
相關配置
react-electron 根目錄(不是 src 目錄)下面新建 main.js 檔案,這個檔案和 electron-quick-start 中的官方預設 main.js 幾乎一模一樣,只修改了載入應用這入口這一個地方:
// 引入electron並建立一個Browserwindow
const {app, BrowserWindow} = require('electron')
const path = require('path')
const url = require('url')
// 保持window物件的全域性引用,避免JavaScript物件被垃圾回收時,視窗被自動關閉.
let mainWindow
function createWindow () {
//建立瀏覽器視窗,寬高自定義具體大小你開心就好
mainWindow = new BrowserWindow({width: 800, height: 600})
/*
* 載入應用----- electron-quick-start中預設的載入入口
mainWindow.loadURL(url.format({
pathname: path.join(__dirname, './build/index.html'),
protocol: 'file:',
slashes: true
}))
*/
// 載入應用----適用於 react 專案
mainWindow.loadURL('http://localhost:3000/');
// 開啟開發者工具,預設不開啟
// mainWindow.webContents.openDevTools()
// 關閉window時觸發下列事件.
mainWindow.on('closed', function () {
mainWindow = null
})
}
// 當 Electron 完成初始化並準備建立瀏覽器視窗時呼叫此方法
app.on('ready', createWindow)
// 所有視窗關閉時退出應用.
app.on('window-all-closed', function () {
// macOS中除非使用者按下 `Cmd + Q` 顯式退出,否則應用與選單欄始終處於活動狀態.
if (process.platform !== 'darwin') {
app.quit()
}
})
app.on('activate', function () {
// macOS中點選Dock圖示時沒有已開啟的其餘應用視窗時,則通常在應用中重建一個視窗
if (mainWindow === null) {
createWindow()
}
})
// 你可以在這個指令碼中續寫或者使用require引入獨立的js檔案.
配置 package.json
{
"name": "knownsec-fed",
"version": "0.1.0",
"private": true,
"main": "main.js", // 這裡 配置啟動檔案
"homepage":".", // 這裡
"dependencies": {
"electron": "^1.7.10",
"react": "^16.2.0",
"react-dom": "^16.2.0",
"react-scripts": "1.1.0"
},
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test --env=jsdom",
"eject": "react-scripts eject",
"electron-start": "electron ." // 這裡 配置electron的start,區別於web端的start
}
}
啟動Electron
#都在reatc-electron根目錄下執行
# 由於我們在main.js檔案裡使用了url訪問到react專案,所以在這裡需要先啟動react專案
npm start
# 啟動electron
npm run electron-start
支援熱除錯,當你修改程式碼後,桌面應用也將會重新更新。
三、打包react專案
首先修改main.js
, 因為現在你要將 react 專案打包在 build 資料夾下面,所以載入應用處改成如下!當然也可在某個配置檔案裡面配置是否屬於開發,此處用if判斷一下從未進行選擇執行哪段載入應用程式碼。但是這裡為了簡便,暫且使用直接修改的方式:
// 載入應用----react 打包
mainWindow.loadURL(url.format({
pathname: path.join(__dirname, './build/index.html'),
protocol: 'file:',
slashes: true
}))
// 載入應用----適用於 react 開發時專案
// mainWindow.loadURL('http://localhost:3000/');
預設情況下,homepage 是 http://localhost:3000,build 後,所有資原始檔路徑都是 /static,而 Electron 呼叫的入口是 file :協議,/static 就會定位到根目錄去,所以找不到靜態檔案。在 package.json
檔案中新增 homepage 欄位並設定為"."後,靜態檔案的路徑就變成了相對路徑,就能正確地找到了新增如下配置:
"homepage":"."
然後就開始打包 react:
npm run-script build
四、打包electron
常用打包外掛
安裝electron-packager
# knownsec-fed目錄下安裝electron-packager包
npm install electron-packager --save-dev
# 安裝electron-packager命令
npm install electron-packager -g
electron-packager命令介紹
electron-packager <location of project> <name of project> <platform> <architecture> <electron version> <optional options>
- location of project: 專案的本地地址,此處我這邊是 ~/knownsec-fed
- location of project: 專案名稱,此處是 knownsec-fed
- platform: 打包成的平臺
- architecture: 使用 x86 還是 x64 還是兩個架構都用
- electron version: electron 的版本
於是,根據我這邊的情況在 package.json
檔案的在 scripts 中加上如下程式碼:
"package": "electron-packager /home/react-electron react-electron --all --out ~/ --electron-version 2.0.6"
複製程式碼
打包完成後會在~/目錄下生成對應平臺的包,在上述命令的--out後面可見
開始打包
npm run-script package
複製程式碼
提醒
由於打包的時候會把瀏覽器核心完整打包進去,所以就算你的專案開發就幾百k的資源,但最終的打包檔案估計也會比較大。
五、專案原始檔加密
可以看到,在每個包下的resources
資料夾裡的app
資料夾 就是我們寫的程式,這樣我們的程式碼就是暴露在使用者電腦上的,這非常的不安全,還好electron 自帶了加密功能。
首先安裝asar
#安裝asar實用程式
npm install -g asar
接下來在生成的應用的resources資料夾下執行下面命令:
asar pack ./app app.asar
執行完畢後在resources資料夾下可以看見生成的app.asar檔案,此時可以把resources目錄下的app資料夾刪除。
至此完成原始碼檔案的加密。
六、結束語
因為工作的原因需要用到electron。通過一週時間的研究和學習,可以得出electron確實是一個跨平臺開發應用的利器,通過web開發就能實現wirte once, run every where的理念。很棒。
最後提一下自己遇到的坑以及一些總結:
- 在electron裡面可以呼叫nodejs幾乎所有的功能,當然前提是需要require nodejs的包;
- 在react的js頁面或者公司專案用到的Ant Design的一些js頁面需要用到electron時候,通過官方的
語句並不能成功引入,此時需要通過const electron = require('electron')
const electron = window.require('electron')
引入;
-
還有,最最最重要的一點!!!!開發時候一般都是在main中通過react專案的URL去熱除錯應用,BUT!!此時請在electron生成的視窗中進行除錯!!如果只在瀏覽器的頁面檢視效果,會提示electron的模組無法匯入,無論你用啥方法!
-
最後,再提一點自己的感觸。使用nodejs的fs包和electron的dialog、app類能夠首先呼叫不同平臺的檔案選擇器和一些特殊資料夾的的功能,比如說桌面、使用者預設資料資料夾的修改。這裡不多作描述了。~~
本文部分引入此篇部落格的觀點,謝謝作者的慷慨總結!!
相關推薦
React + Electron封裝並打包成桌面應用
Electron是什麼 Electron 是一個由 GitHub 開發的開源庫,通過將 Chromium) 和Node.js 組合並使用 HTML,CSS 和 JavaScript 進行構建 Mac,Windows,和 Linux 跨平臺桌面應用程式。 原理: n
Electron把網頁打包成桌面應用並進行源碼加密
let 文件名 安全性 called 加密 name tool support 需求 前言 最近想把自己用html+css+js做的網頁界面打包成桌面應用,網上一搜,發現Electron是一個不錯的選擇,試了試,發現效果真的不錯。這裏記錄一下打包過程以作記錄,便於自己以
Electron 將網頁打包成桌面應用(web頁面生成exe)
在 HTML5的崛起、JavaScript要一統天下之際,有一個名為【跨平臺】的技術越來越火。為什麼會這麼火?因為軟體開發者只需一次編寫程式,即可在 Windows、Linux、Mac、iOS、Android 等平臺執行,大大降低了程式設計師的工作量,也使公司的產
Electron 將網頁打包成桌面應用
1.初始化node專案,生成package.json檔案 1 npm init 2.安裝electron,並儲存為開發依賴項 1 npm install electron -D 3.根目錄下新建index.js檔案 const {app, Bro
vue 使用 Electron打包成桌面應用
1. cd目錄到 npm run build 生成的dist資料夾 2.dist目錄下新建package.json、electron.js檔案,內容如下: { "name": "FloorGuidance", "version": "1.0.0", "description"
002-【最簡單】Electron 怎麼將網頁打包成桌面應用(web前端頁面怎麼生成exe可執行檔案)
在 HTML5的崛起、JavaScript要一統天下之際,有一個名為【跨平臺】的技術越來越火。為什麼會這麼火?因為軟體開發者
【最簡單】Electron 怎麼將網頁打包成桌面應用(web前端頁面怎麼生成exe可執行檔案)
在 HTML5的崛起、JavaScript要一統天下之際,有一個名為【跨平臺】的技術越來越火。為什麼會這麼火?因為軟體開發者只需一次編寫程式,即可在 Windows、Linux、Mac、IOS、
利用Electron將專案前端網頁打包成桌面應用
一、環境搭建 1.全域性安裝node.js 2.全域性安裝electron npm install electron -g 3.準備好要打包的html/js/css等網頁檔案二、進行打包 首先,我們要明白electron打包的檔案架構:你
web項目打包成桌面應用
web項目打包成桌面應用下載: git clone https://github.com/dollarphper/desktop.git 把項目文件放到src目錄: 打包成立即執行文件: npm run package 打包成安裝文件: npm run dist web項目打包成桌面應用
2、node-webkit運行web應用,node-webkit把web應用打包成桌面應用
file 打包成 type 後綴 什麽 ctype 打包 分享圖片 路徑 下面我通過一個簡單的demo來介紹怎麽樣把一個web應用打包成一個可執行文件(這裏只介紹windows環境) 首先新建一個index.html文件,作為我們這個demo的入口頁面,我們暫且就把這個頁
如何在Maven中構建SWT應用並打包成可執行的jar包
前面在Maven中構建SWT應用的時候發現SWT相關jar包在Maven中央倉庫上找不到,後面在stackoverflow上有人提供了一個倉庫地址:https://github.com/maven-eclipse/maven-eclipse.github.io。 &n
web應用打包成桌面可執行程式
本教程旨在幫助開發人員把web應用程式打包成一個可執行的桌面應用程式,並生成一個安裝包setup.exe,直接安裝到本地電腦,方便使用者使用。 1、背景 開發web專案時,大多數選擇主流的chrome等瀏覽器作為開發除錯工具,但終端使用者可能要求相容IE等不常用的瀏覽器,此
使用electron構建跨平臺Node.js桌面應用經驗分享
這樣的 目標 技術分享 兼容 targe 文檔 doc 控件 開發 by zhangxinxu from http://www.zhangxinxu.com/wordpress/?p=6154 本文可全文轉載,但需得到原作者書面許可,同時保留原作者和出處,摘要引流則隨意。
VS2017打包C#桌面應用
新建 sof visual http fonts setup 新建項目 log 安裝 原文地址:https://blog.csdn.net/houheshuai/article/details/78518097 在要打包項目的解決方案 右鍵→添加→ 新建項目 後出現
使用VScode編寫python程序並打包成.exe文件
技術 window 需求 welcom 兩張 系統環境 圖片 == alt 據說Visual Studio Code(VS Code)的諸多好處,了解了一下果然很喜歡,我喜歡它的原因主要有3個,一是VS Code開源且跨平臺,二是因為其界面非常酷,三是可以滿足我的大所屬
NW.js打包一個桌面應用
1.安裝nw(可以到官網:https://nwjs.io下載) npm install nw -g 2.建立一個最最簡單的nw應用 在nwjs資料夾中 新建資料夾app,app資料夾中至少有index.html和package.json(app裡面就是放你專案打包完成的檔案的) index.htm
安裝ionic cordova專案並打包成apk中遇到的問題(安裝的是https://github.com/SilvaEmerson/face_recognition_app)
安裝依賴npm install 解決:安裝了python2.7(版本python3+不行) 再次npm install 解決:以管理員身份在cmd執行 npm install -global -production windows-build-tools 參考:htt
CXF生成客戶端程式碼並打包成jar檔案
最近其他部門提供了WebService介面,本地開發使用的是Java,現在選擇使用根據WSDL文件打成Jar包的方式來處理,在此記錄一下命令 CXF工具請百度自行安裝 CXF生成客戶端程式碼並打包成jar檔案: wsdl2java -frontend jaxws21 -encoding ut
讓網頁裝進Android手機(將html+css+js打包成Android應用)(簡單的)
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
cas服務端自定義登陸頁面用maven-overlays並打包成 war包部署
碼雲: https://gitee.com/NBwuhaotian/cas_server.git 碼雲有可能很慢因為專案500M 打完包270多m 百度雲有zip包: 連結:https://pan.baidu.com/s/1OWtKPd54sdRjITrTiw