半個前端新手入門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
  • 概述:在C#中,++i和i++都是自增運算符,其中++i先增加值再返回,而i++先返回值再增加。應用場景根據需求選擇,首碼適合先增後用,尾碼適合先用後增。詳細示例提供清晰的代碼演示這兩者的操作時機和實際應用。 在C#中,++i 和 i++ 都是自增運算符,但它們在操作上有細微的差異,主要體現在操作的 ...
  • 上次發佈了:Taurus.MVC 性能壓力測試(ap 壓測 和 linux 下wrk 壓測):.NET Core 版本,今天計劃準備壓測一下 .NET 版本,來測試並記錄一下 Taurus.MVC 框架在 .NET 版本的性能,以便後續持續優化改進。 為了方便對比,本文章的電腦環境和測試思路,儘量和... ...
  • .NET WebAPI作為一種構建RESTful服務的強大工具,為開發者提供了便捷的方式來定義、處理HTTP請求並返迴響應。在設計API介面時,正確地接收和解析客戶端發送的數據至關重要。.NET WebAPI提供了一系列特性,如[FromRoute]、[FromQuery]和[FromBody],用 ...
  • 原因:我之所以想做這個項目,是因為在之前查找關於C#/WPF相關資料時,我發現講解圖像濾鏡的資源非常稀缺。此外,我註意到許多現有的開源庫主要基於CPU進行圖像渲染。這種方式在處理大量圖像時,會導致CPU的渲染負擔過重。因此,我將在下文中介紹如何通過GPU渲染來有效實現圖像的各種濾鏡效果。 生成的效果 ...
  • 引言 上一章我們介紹了在xUnit單元測試中用xUnit.DependencyInject來使用依賴註入,上一章我們的Sample.Repository倉儲層有一個批量註入的介面沒有做單元測試,今天用這個示例來演示一下如何用Bogus創建模擬數據 ,和 EFCore 的種子數據生成 Bogus 的優 ...
  • 一、前言 在自己的項目中,涉及到實時心率曲線的繪製,項目上的曲線繪製,一般很難找到能直接用的第三方庫,而且有些還是定製化的功能,所以還是自己繪製比較方便。很多人一聽到自己畫就害怕,感覺很難,今天就分享一個完整的實時心率數據繪製心率曲線圖的例子;之前的博客也分享給DrawingVisual繪製曲線的方 ...
  • 如果你在自定義的 Main 方法中直接使用 App 類並啟動應用程式,但發現 App.xaml 中定義的資源沒有被正確載入,那麼問題可能在於如何正確配置 App.xaml 與你的 App 類的交互。 確保 App.xaml 文件中的 x:Class 屬性正確指向你的 App 類。這樣,當你創建 Ap ...
  • 一:背景 1. 講故事 上個月有個朋友在微信上找到我,說他們的軟體在客戶那邊隔幾天就要崩潰一次,一直都沒有找到原因,讓我幫忙看下怎麼回事,確實工控類的軟體環境複雜難搞,朋友手上有一個崩潰的dump,剛好丟給我來分析一下。 二:WinDbg分析 1. 程式為什麼會崩潰 windbg 有一個厲害之處在於 ...
  • 前言 .NET生態中有許多依賴註入容器。在大多數情況下,微軟提供的內置容器在易用性和性能方面都非常優秀。外加ASP.NET Core預設使用內置容器,使用很方便。 但是筆者在使用中一直有一個頭疼的問題:服務工廠無法提供請求的服務類型相關的信息。這在一般情況下並沒有影響,但是內置容器支持註冊開放泛型服 ...
  • 一、前言 在項目開發過程中,DataGrid是經常使用到的一個數據展示控制項,而通常表格的最後一列是作為操作列存在,比如會有編輯、刪除等功能按鈕。但WPF的原始DataGrid中,預設只支持固定左側列,這跟大家習慣性操作列放最後不符,今天就來介紹一種簡單的方式實現固定右側列。(這裡的實現方式參考的大佬 ...