最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

electron-vite新一代electron開發(fā)構(gòu)建工具

 更新時(shí)間:2022年04月11日 09:33:58   作者:Alex114  
這篇文章主要介紹了electron-vite新一代electron開發(fā)構(gòu)建工具,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

前言

得益于 Vite 卓越的前端開發(fā)體驗(yàn),越來越多的 Electron 項(xiàng)目也開始應(yīng)用它來構(gòu)建開發(fā)。翻閱各種社區(qū)資源可以發(fā)現(xiàn)很多基于 Vite 搭建的 Electron 開發(fā)模板,但都存在著一些共同的問題:

  • 配置相對復(fù)雜,繁瑣(對 main,preload 和 renderer 分別配置)
  • 需要輔助腳本來配合編譯開發(fā)
  • 無法舉一反三,自主選擇前端框架(vue,react,svelte,……)

面對這些問題,我們需要對 Electron 有了解。Electron 是一個基于 Chromium 和 Node.js 的桌面應(yīng)用框架,這意味著編譯構(gòu)建工具需要同時(shí)處理 node.js 和瀏覽器兩種環(huán)境的代碼。這是造成 Electron 開發(fā)構(gòu)建工作復(fù)雜性的主因。

知識點(diǎn)

  • 主進(jìn)程和預(yù)加載腳本,需基于 cjs 模塊化標(biāo)準(zhǔn)構(gòu)建,運(yùn)行在 node 環(huán)境
  • 渲染進(jìn)程,通常融合現(xiàn)代前端框架如 vue.js,react 等基于 iife 模塊化標(biāo)準(zhǔn)構(gòu)建,運(yùn)行在瀏覽器
  • 在 Electron 中開啟 node 集成,可全程基于 cjs 模塊化標(biāo)準(zhǔn)編寫代碼,盡管不需要編譯構(gòu)建,但不利于利用現(xiàn)代前端框架,還會面臨嚴(yán)重的性能和安全問題
  • 基于 esm 標(biāo)準(zhǔn)不編譯構(gòu)建,盡管 node 本身已支持,但 Electron 并不支持,這也是 Electron 后續(xù)版本的一項(xiàng)工作

electron-vite 是什么

electron-vite 是一個與 Vite 集成的 Electron 構(gòu)建工具。開發(fā)者無需過多關(guān)注配置,無論選擇哪種前端框架都能輕松完成構(gòu)建,提高 Electron 的開發(fā)構(gòu)建效率。

特性

  • ??使用方式與 Vite 相同
  • ??主進(jìn)程/渲染進(jìn)程/preload腳本都使用 Vite 構(gòu)建
  • ??統(tǒng)一所有配置,合并到一個文件中
  • ??預(yù)設(shè)構(gòu)建配置,無需關(guān)注配置
  • ??支持渲染進(jìn)程熱更新(HMR)

安裝

npm i electron-vite -D

開發(fā)&編譯

在安裝了 electron-vite 的項(xiàng)目中,可以直接使用 npx electron-vite 運(yùn)行, 也可以在 package.json 文件中添加 npm scripts:

{
  "scripts": {
    "start": "electron-vite preview", // start electron app to preview production build
    "dev": "electron-vite dev", // start dev server and electron app
    "prebuild": "electron-vite build" // build for production
  }
}

為了使用熱更新(HMR),需要使用環(huán)境變量(ELECTRON_RENDERER_URL)來決定 Electron 窗口加載本地頁面還是遠(yuǎn)程頁面。

function createWindow() {
  // Create the browser window
  const mainWindow = new BrowserWindow({
    width: 800,
    height: 600,
    webPreferences: {
      preload: path.join(__dirname, '../preload/index.js')
    }
  })

  // Load the remote URL for development or the local html file for production
  if (!app.isPackaged && process.env['ELECTRON_RENDERER_URL']) {
    mainWindow.loadURL(process.env['ELECTRON_RENDERER_URL'])
  } else {
    mainWindow.loadFile(path.join(__dirname, '../renderer/index.html'))
  }
}

注意: 在開發(fā)中, 渲染進(jìn)程 index.html 文件需要通過 <script type="module"> 引用腳本。

推薦項(xiàng)目目錄

├──src
|  ├──main
|  |  ├──index.js
|  |  └──...
|  ├──preload
|  |  ├──index.js
|  |  └──...
|  └──renderer
|     ├──src
|     ├──index.html
|     └──...
├──electron.vite.config.js
└──package.json

開始學(xué)習(xí)

npm init @quick-start/electron

配置

配置文件

當(dāng)以命令行方式運(yùn)行 electron-vite 時(shí), 將會自動嘗試解析項(xiàng)目根目錄中名為 electron.vite.config.js 的配置文件。最基本的配置文件如下所示:

// electron.vite.config.js
export default {
  main: {
    // vite config options
  },
  preload: {
    // vite config options
  },
  renderer: {
    // vite config options
  }
}

你可以顯式地通過 --config 命令行選項(xiàng)指定一個配置文件(相對于 cwd 路徑進(jìn)行解析):

electron-vite --config my-config.js

提示: electron-vite 也支持 ts 或者 mjs 的配置文件.

配置智能提示

因?yàn)?electron-vite 本身附帶 Typescript 類型,所以你可以通過 IDE 和 jsdoc 的配合來實(shí)現(xiàn)智能提示:

/**
 * @type {import('electron-vite').UserConfig}
 */
const config = {
  // ...
}

export default config

你還可以使用 defineConfig and defineViteConfig 工具函數(shù),這樣不用 jsdoc 注解也可以獲取類型提示:

import { defineConfig, defineViteConfig } from 'electron-vite'

export default defineConfig({
  main: {
    // ...
  },
  preload: {
    // ...
  },
  renderer: defineViteConfig(({ command, mode }) => {
    // conditional config use defineViteConfig
    // ...
  })
})

提示: defineViteConfigVite 中導(dǎo)出.

預(yù)設(shè)配置

基于主進(jìn)程的編譯項(xiàng)預(yù)設(shè):

  • outDir: out\main(相對于根目錄)
  • target: node*, 自動匹配 Electronnode 構(gòu)建目標(biāo), 如 Electron 17 為 node16.13
  • lib.entry: src\main{index|main}.{js|ts|mjs|cjs}(相對于根目錄), 找不到則為空
  • lib.formats: cjs
  • rollupOptions.external: electron和所有內(nèi)置node模塊(如果用戶配置了外部模塊ID,將自動合并)

基于preload腳本的編譯項(xiàng)預(yù)設(shè):

  • outDir: out\preload(相對于根目錄)
  • target: 同主進(jìn)程
  • lib.entry: src\preload{index|preload}.{js|ts|mjs|cjs}(相對于根目錄), 找不到則為空
  • lib.formats: cjs
  • rollupOptions.external: 同主進(jìn)程

基于渲染進(jìn)程的編譯項(xiàng)預(yù)設(shè):

  • root: src\renderer(相對于根目錄)
  • outDir: out\renderer(相對于根目錄)
  • target: chrome*, 自動匹配 Electronchrome 構(gòu)建目標(biāo). 如 Electron 17 為 chrome98
  • lib.entry: src\renderer\index.html(相對于根目錄), 找不到則為空
  • polyfillModulePreload: false, 不需要為渲染進(jìn)程 polyfill Module Preload
  • rollupOptions.external: 同主進(jìn)程

提示:如果你想在已有的項(xiàng)目中使用這些預(yù)設(shè)配置,可以使用 Vite 的插件 vite-plugin-electron-config (github.com/alex8088/vi…)

配置問題

如果 Electron 具有多窗口應(yīng)該如何配置?

當(dāng) Electron 應(yīng)用程序具有多窗口時(shí),就意味著可能有多個 html 頁面和 preload 腳本,你可以像下面一樣修改你的配置文件:

export default {
  main: {},
  preload: {
    build: {
      rollupOptions: {
        input: {
          browser: resolve(__dirname, 'src/preload/browser.ts'),
          webview: resolve(__dirname, 'src/preload/webview.ts')
        }
      }
    }
  },
  renderer: {
    build: {
      rollupOptions: {
        input: {
          browser: resolve(__dirname, 'src/renderer/browser.html'),
          webview: resolve(__dirname, 'src/renderer/webview.html')
        }
      }
    }
  }
}

結(jié)語

項(xiàng)目現(xiàn)在已經(jīng)開源,歡迎各位感興趣的小伙伴參與貢獻(xiàn)提交 PR 或反饋 issue,給予 star 支持。

https://github.com/alex8088/electron-vite

到此這篇關(guān)于electron-vite新一代electron開發(fā)構(gòu)建工具的文章就介紹到這了,更多相關(guān)electron-vite構(gòu)建工具內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Vue之解決Echarts組件使用ID不能復(fù)用的問題

    Vue之解決Echarts組件使用ID不能復(fù)用的問題

    這篇文章主要介紹了Vue之解決Echarts組件使用ID不能復(fù)用的問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • elementui使用el-upload組件實(shí)現(xiàn)自定義上傳的詳細(xì)步驟

    elementui使用el-upload組件實(shí)現(xiàn)自定義上傳的詳細(xì)步驟

    upload上傳是前端開發(fā)很常用的一個功能,在Vue開發(fā)中常用的Element組件庫也提供了非常好用的upload組件,這篇文章主要給大家介紹了關(guān)于elementui使用el-upload組件實(shí)現(xiàn)自定義上傳的詳細(xì)步驟,需要的朋友可以參考下
    2023-12-12
  • vue實(shí)現(xiàn)滑動到底部加載更多效果

    vue實(shí)現(xiàn)滑動到底部加載更多效果

    這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)滑動到底部加載更多效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • vue install 注冊全局組件方式

    vue install 注冊全局組件方式

    這篇文章主要介紹了vue install 注冊全局組件方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Vue3實(shí)現(xiàn)Emoji表情的四種方案

    Vue3實(shí)現(xiàn)Emoji表情的四種方案

    聊天工具的項(xiàng)目開發(fā)到了表情功能,由于目前會話的輸入?yún)^(qū)域使用的是 textarea 而非富文本編輯器,所以表情功能也需要兼顧 textarea 進(jìn)行開發(fā),本文給大家簡單聊聊幾種表情的實(shí)現(xiàn)方,感興趣的小伙伴一起來看看吧
    2025-01-01
  • django簡單的前后端分離的數(shù)據(jù)傳輸實(shí)例 axios

    django簡單的前后端分離的數(shù)據(jù)傳輸實(shí)例 axios

    這篇文章主要介紹了django簡單的前后端分離的數(shù)據(jù)傳輸實(shí)例 axios,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • Vue組織架構(gòu)樹圖組件vue-org-tree的使用解析

    Vue組織架構(gòu)樹圖組件vue-org-tree的使用解析

    這篇文章主要介紹了Vue組織架構(gòu)樹圖組件vue-org-tree的使用解析,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • Vue?Router嵌套路由(children)的用法小結(jié)

    Vue?Router嵌套路由(children)的用法小結(jié)

    嵌套路由就是父路由里面嵌套他的子路由,父路由有自己的路由導(dǎo)航和路由容器(router-link、router-view),通過配置children可實(shí)現(xiàn)多層嵌套,這篇文章主要介紹了Vue--Router--嵌套路由(children)的用法,需要的朋友可以參考下
    2022-08-08
  • vue mounted 調(diào)用兩次的完美解決辦法

    vue mounted 調(diào)用兩次的完美解決辦法

    在開發(fā)中發(fā)現(xiàn)其中一個頁面moutned調(diào)用了兩次,而其他頁面正常,表示很懵逼,然后查找原因,終于找到了,其實(shí)歸根到底是要知道m(xù)ounted的調(diào)用機(jī)制問題。這篇文章主要介紹了vue mounted 調(diào)用兩次的解決辦法,需要的朋友可以參考下
    2018-10-10
  • vue開發(fā)設(shè)計(jì)分支切換與cleanup實(shí)例詳解

    vue開發(fā)設(shè)計(jì)分支切換與cleanup實(shí)例詳解

    這篇文章主要為大家介紹了vue開發(fā)設(shè)計(jì)分支切換與cleanup實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11

最新評論

台东县| 巩义市| 新田县| 河间市| 四子王旗| 嵊州市| 紫金县| 海南省| 庆城县| 天柱县| 长寿区| 龙州县| 丰镇市| 庆城县| 天镇县| 新巴尔虎右旗| 依安县| 滦平县| 江西省| 靖州| 湘乡市| 嘉定区| 林口县| 庆城县| 长子县| 盐城市| 弥勒县| 岱山县| 元阳县| 康乐县| 宝鸡市| 克东县| 沈阳市| 梨树县| 城市| 宝丰县| 普格县| 顺昌县| 剑河县| 和平县| 夏津县|