半個前端新手入門Electron的過程

来源:https://www.cnblogs.com/konghuanxi/archive/2023/02/01/17081776.html
-Advertisement-
Play Games

前言 先說幾句廢話,本人是一名 web 後端開發,主語言是 java,在學 Electron 之前,只會一點點 HTML和 JavaScript。本文講的也是我學習 Electron 的過程,而非教程,請酌情參考。 Electron是什麼 Electron是一個使用 JavaScript、HTML ...


前言

先說幾句廢話,本人是一名 web 後端開發,主語言是 java,在學 Electron 之前,只會一點點 HTML和 JavaScript。本文講的也是我學習 Electron 的過程,而非教程,請酌情參考。

Electron是什麼

Electron是一個使用 JavaScript、HTML 和 CSS 構建桌面應用程式的框架。 嵌入 Chromiu 和 Node.js 到 二進位的 Electron 允許您保持一個 JavaScript 代碼代碼庫並創建 在Windows上運行的跨平臺應用 macOS和Linux——不需要本地開發 經驗。

前置準備

下麵列舉一下學 electron 之前需要掌握哪些技能:

  • 獨立開發一個頁面的能力

    HTML+ JS + CSS,這是必備技能

  • Node.js

    建議掌握。需要會安裝 node 環境,剩下的 API 可以邊用邊學

因為 js 是弱類型語言,在缺少註釋和約束的情況下,寫時一時爽,維護。。。
而 TypeScript 的顯式類型使代碼可讀性更高,更符合我使用 Java 時的習慣,所以又去學了 TypeScript。下麵的講解都基於 Electron + TypeScript,而非 Electron + JS,這個需要區分下。

開始學習

一階段

Electron文檔

按照官方文檔學習,學習順序如下:

  1. 安裝 Electron

  2. Electron中的流程 部分

    瞭解 Electron 的流程模型(主進程和渲染器進程)、上下文隔離等。進程間通信可以看完教程部分再回來細看。

    在渲染器進程中無法使用 Node.js 和 Electron 的 API 是很難受的一點,下文細說。

  3. 教程 部分

    只學習基本要求、創建您的第一個應用程式、使用預載入腳本,其他的先略過

二階段

完成了一階段的學習,還是不知道如何打包一個桌面端程式。此時就輪到 electron-vite 登場了。

electron-vite 是一個新型構建工具,旨在為 Electron ****提供更快、更精簡的開發體驗。

創建基礎工程

electron-vite 提供了多種模板,因為我使用 TypeScript 開發,也不打算引入 vue 等框架,所以使用的是 vanilla-ts 模板。

npm create @quick-start/electron my-app
√ Select a framework: » vanilla
√ Add TypeScript? ... Yes
√ Add Electron updater plugin? ... No
√ Enable Electron download mirror proxy? ... No

運行

按照提示,使用命令行進入到項目中,執行npm install安裝依賴,然後執行npm run dev即可進行調試。

模板也集成了 VsCode 調試,在安裝完依賴之後,用 VsCode 打開項目,按 F5 也可進行調試。

預設情況下,構建輸出將放置在 my-app/out 文件夾中,

打包

npm run build:win

window 系統的打包一行命令搞定,生成的 exe 安裝包在 my-app/dist 文件夾中

三階段

在掌握了基礎的 Electron API 和能將程式打包之後,就可以開始開發自己的程式了。

由於 Electron 的上下文隔離,Electron API 和 Node API 都無法在渲染器進程中使用,只能繞個彎,由主進程提供方法,渲染器進程通過預載入腳本的方式去調用。這就導致了一個問題,很多方法的實際執行都放在主進程中(渲染器進程只是調用),導致了主進程的卡頓,有沒有大佬有好的解決方案?

對我來說,這就是一個面向搜索引擎編程的階段。遇到問題,我一般用以下步驟處理:

  1. 只看搜索引擎第一頁,沒有就換種描述再搜,還沒有就跳轉步驟2
  2. 翻官方文檔,大部分問題在官方文檔中都能找到解決方案。這步需要點耐心,很多問題不是文檔沒寫,而是沒找對。
  3. 最後就是請教大神了

附上:提問的智慧

記錄下新手容易遇到的坑

  1. 不要使用 window.alert 和 window.confirm 方法,會導致 input 框游標消失

    https://github.com/electron/electron/issues/20400

    解決方案是使用 Electron 的彈框 dialog.showMessageBoxSync()

  2. 有多個頁面時,使用預載入腳本出錯,提示找不到對應的js文件

    文檔:多視窗應用程式

  3. 靜態資源處理

  4. 不要阻塞主進程,耗時的任務開線程去做,否則會造成頁面卡頓

    文檔:Worker Threads

    註意在 Electron 中,web worker腳本可以使用 node api,但是不支持 Electron API,也不允許使用其他依賴 Electron API 的庫,例如 electron-store

  5. 安裝引導

    預設配置打包出來的安裝包,運行就直接安裝在預設路徑了。可以去修改 electron-builder 中的 nsis配置

    # electron-builder.yml 文件
    nsis:
      oneClick: false # 創建一鍵安裝程式還是輔助安裝程式(預設是一鍵安裝)
      allowElevation: true # 是否允許請求提升,如果為false,則用戶必須使用提升的許可權重新啟動安裝程式 (僅作用於輔助安裝程式)
      allowToChangeInstallationDirectory: true # 是否允許修改安裝目錄 (僅作用於輔助安裝程式)
      createStartMenuShortcut: true # 是否創建開始菜單快捷方式
      artifactName: ${name}-${version}-setup.${ext}
      shortcutName: ${productName}
      uninstallDisplayName: ${productName}
      createDesktopShortcut: always
    

    文檔:electron-builder#nsis

總結

本文描述了筆者學習 Electron 並搗鼓出一個小工具的過程。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 疑惑 最近在反覆搭建ceph集群過程中,總是遇到osd創建不成功的問題,疑似硬碟殘留信息,排查中引出了很多陌生的命令,比如vgremove等,於是打算重新瞭解這部分。 LVM是什麼? 邏輯捲管理器(LVM,Logical Volume Manager)是一種把硬碟空間分配成邏輯捲的方法。 看到定義可 ...
  • Windows server 2016 搭建DNS伺服器 環境說明: 1、Windows server 2016標準版 實操步驟: 1、添加DNS伺服器功能 1.1、點擊win圖標打開菜單,點擊打開伺服器管理器。 1.2、點擊“ 管理 ”,點擊“ 添加角色和功能 ” 下一步 基於角色或功能的安裝,下 ...
  • Taier 介紹 Taier 是袋鼠雲開源項目之一,是一個分散式可視化的DAG任務調度系統。 旨在降低ETL開發成本、提高大數據平臺穩定性,大數據開發人員可以在 Taier 直接進行業務邏輯的開發,而不用關心任務錯綜複雜的依賴關係與底層的大數據平臺的架構實現,將工作的重心更多地聚焦在業務之中。 項目 ...
  • 0.前言 MySQL由於開源的原因,有各式各樣的中件間Proxy ,極大的豐富了做高可用或遷移的方案,習慣了MySQL生態圈的靈活和便利,Oracle官方不開源代碼和協議,沒有中間件proxy,顯得很笨重。 比如以下的方案就會很不好辦: 實時抓取Oralce的訪問SQL日誌 慢日誌捕獲和收集 高可用 ...
  • 有相當一部分 iPhone 用戶會拒絕iOS更新最新系統,不管是因為各種BUG還是因為其他優化方面的問題,他們都會選擇一個自己覺得均衡的系統版本,安逸養老。 但是蘋果 iOS 系統如果你不及時更新推送版本的話,就會在手機桌面「設置」上方出現角標數字紅點,系統設置中也會出現紅點提示。強迫症患者表示簡直 ...
  • 這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 前言 可視化大屏該如何做?有可能一天完成嗎?廢話不多說,直接看效果,線上 Demo 地址 lxfu1.github.io/large-scree…。 看完這篇文章(這個項目),你將收穫: 全局狀態真的很簡單,你只需 5 分鐘就能上手 如何 ...
  • 1.CSS、SCSS、SASS CSS是開發人員熟知的一種用於頁面樣式開發的語言,可以通過內容的分離控制減少代碼的重覆性,降低代碼的複雜程度。 SASS 與 SCSS 都是 CSS 預處理器,可包含在基於 CSS 的 UI(用戶界面)或前端框架中以簡化開發。這些 SASS 與 SCSS 框架在高級別 ...
  • 鑒於阮一峰老師的技術文章,在此做一個轉載記錄。轉戰react技術一年,希望在技術上可以不斷精進,日後成為一位大牛! 引子:《準備工作》 知識準備 環境準備 第一講:《前端開發的歷史和趨勢》 前端開發的歷史演變 前端MVC框架的興起 前後端分離 全棧工程師 前端開發的未來 第二講:《React 技術棧 ...
一周排行
    -Advertisement-
    Play Games
  • @ 先看一下導出的整體效果(如下圖),其中標註的區域都是通過後臺動態生成的: 一、先在Word中建立好表格模板 1.1、參數創建方法(Word和WPS) 1.1.1、Office中Word域的創建 1.1.1.1、選中指定的單元格 -> 點擊頭部工具欄中的”插入“ -> 選擇 ”文檔部件“ -> 選 ...
  • 在實際工作中,經常會有一些需要定時操作的業務,如:定時發郵件,定時統計信息等內容,那麼如何實現才能使得我們的項目整齊劃一呢?本文通過一些簡單的小例子,簡述在.Net6+Quartz實現定時任務的一些基本操作,及相關知識介紹,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 紙殼CMS支持將評論、留言、表單提交、訂閱等通知,通過WebHook發送到第三方平臺,比如釘釘。 創建釘釘WebHook 需要在釘釘群中創建自定義機器人,具體方法可以參考釘釘的官方文檔: 自定義機器人接入 需要註意的是,在安全設置中不要使用加簽,使用自定義關鍵字即可。在發送的消息中,只要包含這個關鍵 ...
  • 向下轉型的使用 Java的多態性: 父類指向子類的聲明 Animal animal = new Dog()//Dog()重寫了父類Animal 有了對象的多態性以後,記憶體實際上載入的是==子類==的屬性和方法,但是由於變數聲明為==父類類型==,導致編譯時只能調用父類的屬性和方法,子類特有的屬性方法 ...
  • spring源碼環境搭建 組件 版本 jdk 1.8.0_192 spring-framework 5.3.x gradle 7.5.1 idea 2022.3.3 aspectJ 1.9 可根據spring-framwork項目說明靈活選擇 一、拉取spring-framework項目 1、spr ...
  • 首先任何的商業邏輯,光流量增長,沒法變現是沒用的。 就像博客群發提效工具,得有對應的用戶,更得有對應付費用戶群體的畫像。剩下的就是靠增長,被動讓他們找到你的產品,用產品解決他們痛點,他們自然而然會付費。 下麵大致分享下從三個方向分享下: 用戶痛點 -> 真正的付費用戶群體 產品價值 PLG 增長 一 ...
  • Object類的使用 Object類 Object類中的方法可以在網上搜索得到 Object類是所有java類的父類 如果類在聲明中未使用extends關鍵字指明其父類,則預設父類為java.lang.Object類 Object類中的功能(屬性、方法)具有通用性。 屬性:無 方法:equals() ...
  • Qt 源碼分析之moveToThread 這一次,我們來看Qt中關於將一個QObject對象移動至一個線程的函數moveToThread Qt使用線程的基本方法 首先,我們簡單的介紹一下在Qt中使用多線程的幾種方法: 重寫QThread的run函數,將要在多線程執行的任務放到run函數里 /*myt ...
  • 包裝類的使用 包裝類的使用 java提供8種基本數據類型對應的包裝類,使得基本數據類型變數具有類的特征 掌握:==基本數據類型、包裝類、String==三者之間的互相轉換 自動裝箱與自動拆箱==[基本數據類型和包裝類的轉換]== JDK5.0新特性,自動裝箱與自動拆箱。 class Test{ pu ...
  • 本文已經收錄到Github倉庫,該倉庫包含電腦基礎、Java基礎、多線程、JVM、資料庫、Redis、Spring、Mybatis、SpringMVC、SpringBoot、分散式、微服務、設計模式、架構、校招社招分享等核心知識點,歡迎star~ Github地址 大家好,我是大彬~ 今天來聊聊接 ...