Electron入門

Electron是什么?
Electron是一個(gè)使用 JavaScript、HTML 和 CSS 構(gòu)建桌面應(yīng)用程序的框架。 嵌入 Chromium 和 Node.js 到 二進(jìn)制的 Electron 允許您保持一個(gè) JavaScript 代碼代碼庫(kù)并創(chuàng)建 在Windows上運(yùn)行的跨平臺(tái)應(yīng)用 macOS和Linux

安裝要求:

  1. 代碼編輯器
  2. 命令行工具,如terminal
  3. git
  4. node.js與npm。請(qǐng)使用平臺(tái)預(yù)構(gòu)建的 Node.js 安裝器來進(jìn)行安裝, 否則,可能會(huì)遇到與不同開發(fā)工具不兼容的問題。雖然需要在開發(fā)環(huán)境安裝 Node.js 才能編寫 Electron 項(xiàng)目,但是 Electron 不使用系統(tǒng)的 Node.js 環(huán)境來運(yùn)行它的代碼。 相反地,它使用它內(nèi)置的 Node.js 運(yùn)行時(shí)。 這意味著您的終端用戶不需要 Node.js 環(huán)境也可以運(yùn)行應(yīng)用。

創(chuàng)建項(xiàng)目:

  1. 初始化項(xiàng)目

    mkdir my-electron-app && cd my-electron-app
    npm init
    npm install electron --save-dev
    

    這時(shí)候報(bào)錯(cuò):RequestError: connect ETIMEDOUT 20.205.243.166:443

    嘗試:npm config set registry https://registry.npm.taobao.org/,無效

    嘗試:修改hosts文件,解決

  2. 編輯package.json

    {
      "name": "my-electron-app",
      "version": "1.0.0",
      "description": "Hello World!",
      "main": "main.js",
      "author": "Jane Doe",
      "license": "MIT",
      "scripts": {
        "start": "electron ."
      },
      "devDependencies": {
        "electron": "^19.0.0"
      }
    }
    
  3. 編寫main.js文件

    console.log(`歡迎來到 Electron ??`)
    
  1. 運(yùn)行

    npm run start
    

    出現(xiàn)亂碼

    解決方式:chcp 65001

  2. 運(yùn)行成功后,嘗試寫入BrowserWindow

    新建index.html

    <!DOCTYPE html>
    <html>
      <head>
        <meta charset="UTF-8" />
        <!-- https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP -->
        <meta
          http-equiv="Content-Security-Policy"
          content="default-src 'self'; script-src 'self'"
        />
        <meta
          http-equiv="X-Content-Security-Policy"
          content="default-src 'self'; script-src 'self'"
        />
        <title>Hello from Electron renderer!</title>
      </head>
      <body>
        <h1>Hello from Electron renderer!</h1>
        <p>??</p>
      </body>
    </html>
    
  3. 修改main.js

    const { app, BrowserWindow } = require('electron')
    
    const createWindow = () => {
      const win = new BrowserWindow({
        width: 800,
        height: 600,
      })
    
      win.loadFile('index.html')
    }
    
    //也可以采用app.whenReady()來實(shí)現(xiàn)
    app.on('ready').then(() => {
      createWindow()
      // 即使沒有打開任何窗口,macOS 應(yīng)用通常也會(huì)繼續(xù)運(yùn)行。 在沒有窗口可用時(shí)調(diào)用 app 會(huì)打開一個(gè)新窗口。為了實(shí)現(xiàn)這一特性,可以監(jiān)聽模組的 activate 事件,如果沒有任何活動(dòng)的 BrowserWindow,調(diào)用 createWindow() 方法新建一個(gè)。因?yàn)榇翱跓o法在 ready 事件前創(chuàng)建,你應(yīng)當(dāng)在你的應(yīng)用初始化后僅監(jiān)聽 activate 事件。 要實(shí)現(xiàn)這個(gè),僅監(jiān)聽 whenReady() 回調(diào)即可。
      app.on('activate', () => {
        if (BrowserWindow.getAllWindows().length === 0) {
          createWindow();
        }
      });
    })
    
    //如果所有窗口都關(guān)閉,則退出應(yīng)用
    app.on('window-all-closed', () => {
      if (process.platform !== 'darwin') app.quit()
    })
    
  4. 使用vscode實(shí)現(xiàn)調(diào)試功能

    新建.vscode\launch.json

    {
      "version": "0.2.0",
      "compounds": [
        {
          "name": "Main + renderer",
          "configurations": ["Main", "Renderer"],
          "stopAll": true
        }
      ],
      "configurations": [
        {
          "name": "Renderer",
          "port": 9222,
          "request": "attach",
          "type": "chrome",
          "webRoot": "${workspaceFolder}"
        },
        {
          "name": "Main",
          "type": "node",
          "request": "launch",
          "cwd": "${workspaceFolder}",
          "runtimeExecutable": "${workspaceFolder}/node_modules/.bin/electron",
          "windows": {
            "runtimeExecutable": "${workspaceFolder}/node_modules/.bin/electron.cmd"
          },
          "args": [".", "--remote-debugging-port=9222"],
          "outputCapture": "std",
          "console": "integratedTerminal"
        }
      ]
    }
    

    使用vscode打開當(dāng)前文件夾

    在調(diào)試欄選擇選項(xiàng) Main+renderer

    • Main 用來運(yùn)行主程序,并且暴露出 9222 端口用于遠(yuǎn)程調(diào)試 (--remote-debugging-port=9222) 。 我們將把調(diào)試器綁定到那個(gè)端口來調(diào)試 renderer 。 因?yàn)橹鬟M(jìn)程是 Node.js 進(jìn)程,類型被設(shè)置為 node。
    • Renderer 用來調(diào)試渲染器進(jìn)程。 因?yàn)楹笳呤怯芍鬟M(jìn)程創(chuàng)建的,我們要把它 “綁定” 到主進(jìn)程上 ()"request": "attach",而不是創(chuàng)建一個(gè)新的。 渲染器是 web 進(jìn)程,因此要選擇 chrome 調(diào)試器。
    • Main + renderer 是一個(gè) 復(fù)合任務(wù),可同時(shí)執(zhí)行前兩個(gè)任務(wù)。

    這樣按F5即可啟動(dòng)調(diào)試應(yīng)用

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容