天天看點

使用electron打包桌面應用

目錄結構與檔案

Electron App的目錄結構如下:

your-app/
├── package.json
├── main.js
└── index.html      

你應用裡的 package.json 看起來應該像:

{  "name"    : "your-app",
  "version" : "0.1.0",
  "main"    : "main.js"
}
           

注:當package.json裡不存在main時,Electron将會預設使用index.js

main.js是啟動你App的腳本,它将會開啟主程序,main.js應當建立一個視窗并處理系統事件。一個典型的例子如下:

// 控制應用生命周期的子產品
const {app} = electron;
// 建立本地浏覽器視窗的子產品
const {BrowserWindow} = electron;
 
// 指向視窗對象的一個全局引用,如果沒有這個引用,那麼當該javascript對象被垃圾回收的
// 時候該視窗将會自動關閉
let win;
 
function createWindow() {
  // 建立一個新的浏覽器視窗
  win = new BrowserWindow({width: 1920, height: 1080});
 
  // 并且裝載應用的index.html頁面
  win.loadURL(`file://${__dirname}/index.html`);
 
  // 打開開發工具頁面
  //win.webContents.openDevTools();
 
  // 當視窗關閉時調用的方法
  win.on('closed', () => {
    // 解除視窗對象的引用,通常而言如果應用支援多個視窗的話,你會在一個數組裡
    // 存放視窗對象,在視窗關閉的時候應當删除相應的元素。
    win = null;
  });
}
 
// 當Electron完成初始化并且已經建立了浏覽器視窗,則該方法将會被調用。
// 有些API隻能在該事件發生後才能被使用。
app.on('ready', createWindow);
/* var mainWindow = new BrowserWindow({
  webPreferences: {
    nodeIntegration: false
  }
}); */
// 當所有的視窗被關閉後退出應用
app.on('window-all-closed', () => {
  // 對于OS X系統,應用和相應的菜單欄會一直激活直到使用者通過Cmd + Q顯式退出
  if (process.platform !== 'darwin') {
    app.quit();
  }
});
 
app.on('activate', () => {
  // 對于OS X系統,當dock圖示被點選後會重新建立一個app視窗,并且不會有其他
  // 視窗打開
  if (win === null) {
    createWindow();
  }
});
           

最後,index.html是你最終要展示的頁面

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>Hello World!</title>
  </head>
  <body>
    <h1>Hello World!</h1>
    We are using node <script>document.write(process.versions.node)</script>,
    Chrome <script>document.write(process.versions.chrome)</script>,
    and Electron <script>document.write(process.versions.electron)</script>.
  </body>
</html>
           

electron打包釋出

全局安裝electron 

npm install electron -g
           

在cmd 直接輸入 electron 直接啟electron

使用electron打包桌面應用

就會出現如下圖的界面

使用electron打包桌面應用

預覽應用,就是把app那個檔案直接拖入到打開的 electron裡面就可以檢視效果了 釋出成exe的問題

使用指令 npm install --save-dev electron-packager将electron-package安裝到項目的路徑下面

使用electron打包桌面應用

安裝完成後,package.json中會多出一條electron-package的版本号配置資訊

"devDependencies": {
    "electron-packager": "^6.0.0",
    "electron-prebuilt": "^0.37.3",
    "gulp": "^3.9.1"
  }
           

ele ctron-packager的打包基本指令是: 指令說明: 

* location of project:項目所在路徑 

* name of project:打包的項目名字 

* platform:确定了你要建構哪個平台的應用(Windows、Mac 還是 Linux) 

* architecture:決定了使用 x86 還是 x64 還是兩個架構都用 

* electron version:electron 的版本 

* optional options:可選選項

指令比較長,每次要是都用這個指令來打包會很煩,可以使用第二種方法;

首先在項目根目錄下面的 package.json 裡添加代碼, 

"packager": "electron-packager ./app HelloWorld --all --out ./OutApp --version 1.4.0 --overwrite --icon=

./app/img/icon/icon.ico"

PS:這裡要注意,字段裡的 項目名字,version,icon路徑要改成自己的; 

具體添加位置如圖,

使用electron打包桌面應用

然後,在使用指令 npm run-script packager

使用electron打包桌面應用

最後,打包完成之後如圖 

使用electron打包桌面應用

運作對應包下的.exe檔案,就可以看到我們的應用了。

還有就是為了避免源代碼直接暴露給使用者,我們還需要做的就是用asar把./resources下面的app檔案打包成一個asar的檔案

然後直接把app檔案删除,把打包好的app.asar直接./resources下面,在運作appName.exe就好了

注意,asar的檔案名一定得是app

asar pack your-app app.asar
           

例如:asar pack  F:\atom_project\myatom_1  F:\atom_project\app.asar

這樣就會把myatom_1打包成app.asar 再給大家推薦一個使用nsis制作安裝程式的部落格:http://www.cnblogs.com/modou/p/3573772.html

繼續閱讀