Electron+Vue3+TypeScript+Vite桌面應(yīng)用程序項(xiàng)目初始化

Electron+Vue3+TypeScript+Vite桌面應(yīng)用程序項(xiàng)目初始化

初始化vite項(xiàng)目

yarn create vite todolist --template vue-ts

[圖片上傳失敗...(image-917e0-1652326973758)]

cd todolist
yarn
yarn dev

瀏覽器訪問3000端口

[圖片上傳失敗...(image-ab0455-1652326973758)]

安裝Electron

yarn add -D electron electron-builder rimraf vite-plugin-electron electron-devtools-installer

如果覺得安裝慢尼夺,可以改為淘寶鏡像伏社,或者根目錄添加.yarnrc文件

registry "https://registry.npm.taobao.org/"

electron_mirror "https://npm.taobao.org/mirrors/electron/"
electron_builder_binaries_mirror "http://npm.taobao.org/mirrors/electron-builder-binaries/"

插件說明

electron-builder:打包工具

rimraf:快速刪除文件或目錄工具

vite-plugin-electron:vite 結(jié)合 electron 的庫(kù)刁赖,關(guān)于這個(gè)插件可以參見 Vite 與 Electron 無縫銜接

electron-devtools-installer:electron 開發(fā)工具

vite-plugin-electron 插件是將 vite 和 electron 結(jié)合在一起的锌畸,可以讓我們非常方便的結(jié)合 electron 和 vue,需要做一些指定的配置嗦枢。

初始化electron項(xiàng)目

新建目錄文件electron-main/index.ts主進(jìn)程目錄和文件阅悍、electron-preload/index.ts預(yù)加載目錄和文件

// electron-main/index.ts
import { app, BrowserWindow } from 'electron';
import path from 'path';

const createWindow = () => {
  const win = new BrowserWindow({
    webPreferences: {
      contextIsolation: false,
      nodeIntegration: true,
      preload: path.join(__dirname, '../electron-preload/index.js'),
    },
  });

  if (app.isPackaged) {
    win.loadFile(path.join(__dirname, '../index.html'));
  } else {
    // Use ['ENV_NAME'] avoid vite:define plugin
    const url = `http://${process.env['VITE_DEV_SERVER_HOST']}:${process.env['VITE_DEV_SERVER_PORT']}`;

    win.loadURL(url);
  }
};

app.whenReady().then(() => {
  createWindow();

  app.on('activate', () => {
    // On macOS it's common to re-create a window in the app when the
    // dock icon is clicked and there are no other windows open.
    if (BrowserWindow.getAllWindows().length === 0) createWindow();
  });
});

app.on('window-all-closed', () => {
  if (process.platform !== 'darwin') {
    app.quit();
  }
});

需要注意引入的預(yù)加載文件應(yīng)該是打包后的 js 文件,路徑和 ts 文件路徑相同弦撩,只要類型改為 js 即可步咪。

// electron-preload/index.ts
import os from 'os';

console.log(os.platform()); // 測(cè)試打印一下系統(tǒng)平臺(tái)

配置vite-electron

tsconfig.json

在 tsconfig.json 中監(jiān)聽 electron 相關(guān)文件和提示

"include": [..., "electron-main/**/*.ts", "electron-preload/**/*.ts"],

省略號(hào)是之前的配置,copy后面一段代碼粘貼即可

vite.config.ts配置

配置主進(jìn)程和預(yù)加載腳本地址

import { defineConfig } from 'vite';
import vue from '@vitejs/plugin-vue';
import * as path from 'path';
import electron from 'vite-plugin-electron';
import electronRenderer from 'vite-plugin-electron/renderer';
import polyfillExports from 'vite-plugin-electron/polyfill-exports';

export default defineConfig({
  plugins: [
    vue(),
    electron({
      main: {
        entry: 'electron-main/index.ts',
      },
      preload: {
        // Must be use absolute path, this is the limit of rollup
        input: path.join(__dirname, './electron-preload/index.ts'),
      },
    }),
    electronRenderer(),
    polyfillExports(),
  ],
  build: {
    emptyOutDir: false, // 必須配置益楼,否則electron相關(guān)文件將不會(huì)生成build后的文件
  },
});

package.json配置

{
  "name": "todolist",
  "private": true,
  "version": "0.0.0",
  "main": "dist/electron-main/index.js", // 增加
  "scripts": {
    "dev": "vite",
    "build": "vue-tsc --noEmit && vite build",
    "build-electron": "rimraf dist && vite build && electron-builder", // 增加
    "preview": "vite preview"
  },
}

主要是增加入口文件猾漫,因?yàn)?electron 還沒有原生支持 ts,因此目前還是必須加載 js 文件感凤,所以入口文件我們配置為解析后的 js 文件路徑:dist/electron-main/index.js悯周,然后修改執(zhí)行腳本,在 build-electron 命令中增加 electron-builder 打包命令陪竿。

electron-builder打包配置

{
  ...,
  "build": {
    "appId": "com.electron.desktop",
    "productName": "ElectronVueVite",
    "asar": true,
    "copyright": "Copyright ? 2022 XingXingZaiXian",
    "directories": {
      "output": "release/${version}"
    },
    "files": [
      "dist"
    ],
    "mac": {
      "artifactName": "${productName}_${version}.${ext}",
      "target": [
        "dmg"
      ]
    },
    "win": {
      "target": [
        {
          "target": "nsis",
          "arch": [
            "x64"
          ]
        }
      ],
      "artifactName": "${productName}_${version}.${ext}"
    },
    "nsis": {
      "oneClick": false,
      "perMachine": false,
      "allowToChangeInstallationDirectory": true,
      "deleteAppDataOnUninstall": false
    }
  }
}

運(yùn)行調(diào)試

yarn dev

[圖片上傳失敗...(image-7a201d-1652326973758)]

[圖片上傳失敗...(image-bb7882-1652326973758)]

嘗試F12調(diào)試看看禽翼,按了半天沒有反應(yīng),應(yīng)該是沒有打開配置,修改electron-main/index.ts

const createWindow = () => {
  ...
  // 最后添加一行代碼
  win.webContents.openDevTools()
};

熱更闰挡,已經(jīng)打開了調(diào)試工具

[圖片上傳失敗...(image-58eacd-1652326973758)]

且已打印了系統(tǒng)平臺(tái)

打包

yarn run build-electron

[圖片上傳失敗...(image-39a639-1652326973758)]

執(zhí)行完后會(huì)生成兩個(gè)目錄:distrelease锐墙。dist 目錄中生成的是前端打包文件,release 中生成的是electron 打包文件解总,內(nèi)容如下:

[圖片上傳失敗...(image-a1b23d-1652326973758)]

其中 win-uppacked 中生成的是無需安裝的執(zhí)行文件贮匕,將此目錄直接壓縮后就可以發(fā)送給別人,解壓即可使用花枫。todolist_0.0.0.exe 文件是安裝包刻盐,打開會(huì)顯示安裝過程,執(zhí)行完安裝過程后在系統(tǒng)的控制面板中的軟件列表中可以看到該軟件劳翰,也可以執(zhí)行卸載敦锌。

結(jié)語

到這里,我們的初始化項(xiàng)目就算結(jié)束了佳簸,相信你也可以快速建立自己的第一個(gè)桌面應(yīng)用程序乙墙。

本項(xiàng)目將持續(xù)更新,希望你也持續(xù)關(guān)注生均。

項(xiàng)目地址

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末听想,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子马胧,更是在濱河造成了極大的恐慌汉买,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,743評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件佩脊,死亡現(xiàn)場(chǎng)離奇詭異蛙粘,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)威彰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門出牧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人歇盼,你說我怎么就攤上這事舔痕。” “怎么了旺遮?”我有些...
    開封第一講書人閱讀 157,285評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵赵讯,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我耿眉,道長(zhǎng)边翼,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,485評(píng)論 1 283
  • 正文 為了忘掉前任鸣剪,我火速辦了婚禮组底,結(jié)果婚禮上丈积,老公的妹妹穿的比我還像新娘。我一直安慰自己债鸡,他們只是感情好江滨,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,581評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著厌均,像睡著了一般唬滑。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上棺弊,一...
    開封第一講書人閱讀 49,821評(píng)論 1 290
  • 那天晶密,我揣著相機(jī)與錄音,去河邊找鬼模她。 笑死稻艰,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的侈净。 我是一名探鬼主播尊勿,決...
    沈念sama閱讀 38,960評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼畜侦!你這毒婦竟也來了元扔?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,719評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤旋膳,失蹤者是張志新(化名)和其女友劉穎摇展,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體溺忧,經(jīng)...
    沈念sama閱讀 44,186評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,516評(píng)論 2 327
  • 正文 我和宋清朗相戀三年盯孙,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了鲁森。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,650評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡振惰,死狀恐怖歌溉,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情骑晶,我是刑警寧澤痛垛,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布,位于F島的核電站桶蛔,受9級(jí)特大地震影響匙头,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜仔雷,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,936評(píng)論 3 313
  • 文/蒙蒙 一蹂析、第九天 我趴在偏房一處隱蔽的房頂上張望舔示。 院中可真熱鬧,春花似錦电抚、人聲如沸惕稻。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽俺祠。三九已至,卻和暖如春借帘,著一層夾襖步出監(jiān)牢的瞬間蜘渣,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工姻蚓, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留宋梧,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,370評(píng)論 2 360
  • 正文 我出身青樓狰挡,卻偏偏與公主長(zhǎng)得像捂龄,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子加叁,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,527評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容