2018年4月16日 星期一

初探Electron

初探Electron

前言

  目前的javascript遊戲引擎一直有個問題,就是沒有編輯器,要寫的話在檔案存取的部分要花上不少的時間,在偶然間,看到Electron,它可以把網頁變成本地的App,這樣就可以直接存取本地的檔案系統,看起來似乎是一個解決檔案存取的好方案,在此就先研究看看。

內容

  使用Electron需要node.js,請先安裝,安裝好後建一個資料夾,它會作為專案的root,之後在該資料夾輸入以下命令

npm init

全部用預設值後會產生package.json,接著一樣在專案的root輸入以下命令

npm install --save-dev electron

如果要安裝成全域套件,輸入以下命令

npm install electron -g

接著在專案的root產生一個檔案main.js,內容如下

const {app, BrowserWindow} = require('electron')
  const path = require('path')
  const url = require('url')
  
  // 將這個 window 物件記在全域變數裡。
  // 如果沒這麼做,這個視窗在 JavaScript 物件被垃圾回收時(GC)後就會被自動關閉。
  let win
  
  function createWindow () {
    // 建立瀏覽器視窗。
    win = new BrowserWindow({width: 800, height: 600})
  
    // 並載入應用程式的 index.html。
    win.loadURL(url.format({
      pathname: path.join(__dirname, 'index.html'),
      protocol: 'file:',
      slashes: true
    }))
  
    // 打開 DevTools。
    win.webContents.openDevTools()
  
    // 視窗關閉時會觸發。
    win.on('closed', () => {
      // 拿掉 window 物件的參照。如果你的應用程式支援多個視窗,
      // 你可能會將它們存成陣列,現在該是時候清除相關的物件了。
      win = null
    })
  }
  
  
  // 當 Electron 完成初始化,並且準備好建立瀏覽器視窗時
  // 會呼叫這的方法
  // 有些 API 只能在這個事件發生後才能用。
  app.on('ready', createWindow)
  
  // 在所有視窗都關閉時結束程式。
  app.on('window-all-closed', () => {
    // 在 macOS 中,一般會讓應用程式及選單列繼續留著,
    // 除非使用者按了 Cmd + Q 確定終止它們
    if (process.platform !== 'darwin') {
      app.quit()
    }
  })
  
  app.on('activate', () => {
    // 在 macOS 中,一般會在使用者按了 Dock 圖示
    // 且沒有其他視窗開啟的情況下,
    // 重新在應用程式裡建立視窗。
    if (win === null) {
      createWindow()
    }
  })
  
  // 你可以在這個檔案中繼續寫應用程式主程序要執行的程式碼。 
  // 你也可以將它們放在別的檔案裡,再由這裡 require 進來。

接著一樣在專案的root產生一個檔案index.html,內容如下

<!DOCTYPE html>
  <html>
    <head>
      <meta charset="UTF-8">
      <title>Hello World!</title>
    </head>
    <body>
      <h1>Hello World!</h1>
      我們用了 node <script>document.write(process.versions.node)</script>,
      Chrome <script>document.write(process.versions.chrome)</script>,
      以及 Electron <script>document.write(process.versions.electron)</script>.
    </body>
  </html>

接著修改package.json,修改內容如下

{
  "name": "test",
  "version": "1.0.0",
  "description": "",
  "main": "main.js",
  "scripts": {
    "start": "electron .",
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "electron": "^1.8.4"
  }
}
最後在專案的root輸入以下命令

npm start

接著就會看到HelloWorld視窗如下圖
HelloWorld視窗

後記

  用起來比想像中還簡單許多,看起來似乎是用chrome作為視窗,連debugger都叫得出來!這次只是初探,以後有機會再多多研究。

參考內容

寫你第一個 Electron 應用程式

沒有留言:

張貼留言