0


小满Vue3第三十九章(Vue开发桌面程序Electron)

建议视频教程小满Vue3(第三十九章 electron桌面程序)_哔哩哔哩_bilibili

Electron官网Electron | Build cross-platform desktop apps with JavaScript, HTML, and CSS.

我们用的VsCode 也是 electron 开发的

electron 内置了 Chromium 和 nodeJS 其中 Chromium 是渲染进程 主要渲染和解析HTML,Nodejs作为主进程,其中管道用IPC 通信

1.使用vite 构建 electron项目

创建一个vite 项目

  1. npm init vite@latest

安装electron

  1. npm install electron -D
  2. npm install vite-plugin-electron -D

根目录新建 electron / index.ts

修改vite.config.ts 配置文件

引入electron插件配置main entry对应electron的文件

  1. import { defineConfig } from 'vite'
  2. import vue from '@vitejs/plugin-vue'
  3. import electron from 'vite-plugin-electron'
  4. // https://vitejs.dev/config/
  5. export default defineConfig({
  6. plugins: [vue(), electron({
  7. main: {
  8. entry: "electron/index.ts"
  9. }
  10. })]
  11. })

编写代码 electron / index.ts

  1. import { app, BrowserWindow } from 'electron'
  2. import path from 'path'
  3. //app 控制应用程序的事件生命周期。
  4. //BrowserWindow 创建并控制浏览器窗口。
  5. let win: BrowserWindow | null;
  6. //定义全局变量获取 窗口实例
  7. const createWindow = () => {
  8. win = new BrowserWindow({
  9. //
  10. webPreferences: {
  11. devTools: true,
  12. contextIsolation: false,
  13. nodeIntegration: true
  14. //允许html页面上的javascipt代码访问nodejs 环境api代码的能力(与node集成的意思)
  15. }
  16. })
  17. if (app.isPackaged) {
  18. win.loadFile(path.join(__dirname, "../index.html"));
  19. } else {
  20. //VITE_DEV_SERVER_HOST 如果是undefined 换成 VITE_DEV_SERVER_HOSTNAME
  21. win.loadURL(`http://${process.env['VITE_DEV_SERVER_HOST']}:${process.env['VITE_DEV_SERVER_PORT']}`)
  22. }
  23. }
  24. //isPackage 不好使换下面的
  25. // if(process.env.NODE_ENV != 'development'){
  26. // win.loadFile(path.join(__dirname, "../index.html"));
  27. // }else{
  28. //win.loadURL(`http://${process.env['VITE_DEV_SERVER_HOSTNAME']}:${process.env['VITE_DEV_SE//RVER_PORT']}`)
  29. // }
  30. //在Electron完成初始化时被触发
  31. app.whenReady().then(createWindow)

配置package json 增加main 字段** type 去掉**

  1. {
  2. "name": "electron-vite",
  3. "private": true,
  4. "version": "0.0.0",
  5. "main": "dist/electron/index.js",
  6. "scripts": {
  7. "dev": "vite",
  8. "build": "vue-tsc --noEmit && vite build && electron-builder",
  9. "preview": "vite preview"
  10. },
  11. "dependencies": {
  12. "vue": "^3.2.37"
  13. },
  14. "devDependencies": {
  15. "@vitejs/plugin-vue": "^3.0.0",
  16. "electron": "^19.0.10",
  17. "electron-builder": "^23.1.0",
  18. "typescript": "^4.6.4",
  19. "vite": "^3.0.0",
  20. "vite-plugin-electron": "^0.8.3",
  21. "vue-tsc": "^0.38.4"
  22. }
  23. }

npm run dev

2.打包Electron

需要安装electron-builder

  1. npm install electron-builder -D

package json 配置 build 修改npm run build命令

  1. "build": "vue-tsc --noEmit && vite build && electron-builder",
  1. "build": {
  2. "appId": "com.electron.desktop",
  3. "productName": "electron",
  4. "asar": true,
  5. "copyright": "Copyright © 2022 electron",
  6. "directories": {
  7. "output": "release/"
  8. },
  9. "files": [
  10. "dist"
  11. ],
  12. "mac": {
  13. "artifactName": "${productName}_${version}.${ext}",
  14. "target": [
  15. "dmg"
  16. ]
  17. },
  18. "win": {
  19. "target": [
  20. {
  21. "target": "nsis",
  22. "arch": [
  23. "x64"
  24. ]
  25. }
  26. ],
  27. "artifactName": "${productName}_${version}.${ext}"
  28. },
  29. "nsis": {
  30. "oneClick": false,
  31. "perMachine": false,
  32. "allowToChangeInstallationDirectory": true,
  33. "deleteAppDataOnUninstall": false
  34. },
  35. "publish": [
  36. {
  37. "provider": "generic",
  38. "url": "http://127.0.0.1:8080"
  39. }
  40. ],
  41. "releaseInfo": {
  42. "releaseNotes": "版本更新的具体内容"
  43. }
  44. }

nsis 配置详解

  1. {"oneClick": false, // 创建一键安装程序还是辅助安装程序(默认是一键安装)
  2. "allowElevation": true, // 是否允许请求提升,如果为false,则用户必须使用提升的权限重新启动安装程序 (仅作用于辅助安装程序)
  3. "allowToChangeInstallationDirectory": true, // 是否允许修改安装目录 (仅作用于辅助安装程序)
  4. "installerIcon": "public/timg.ico",// 安装程序图标的路径
  5. "uninstallerIcon": "public/timg.ico",// 卸载程序图标的路径
  6. "installerHeader": "public/timg.ico", // 安装时头部图片路径(仅作用于辅助安装程序)
  7. "installerHeaderIcon": "public/timg.ico", // 安装时标题图标(进度条上方)的路径(仅作用于一键安装程序)
  8. "installerSidebar": "public/installerSiddebar.bmp", // 安装完毕界面图片的路径,图片后缀.bmp,尺寸164*314 (仅作用于辅助安装程序)
  9. "uninstallerSidebar": "public/uninstallerSiddebar.bmp", // 开始卸载界面图片的路径,图片后缀.bmp,尺寸164*314 (仅作用于辅助安装程序)
  10. "uninstallDisplayName": "${productName}${version}", // 控制面板中的卸载程序显示名称
  11. "createDesktopShortcut": true, // 是否创建桌面快捷方式
  12. "createStartMenuShortcut": true,// 是否创建开始菜单快捷方式
  13. "shortcutName": "SHom", // 用于快捷方式的名称,默认为应用程序名称
  14. "include": "script/installer.nsi", // NSIS包含定制安装程序脚本的路径,安装过程中自行调用 (可用于写入注册表 开机自启动等操作)
  15. "script": "script/installer.nsi", // 用于自定义安装程序的NSIS脚本的路径
  16. "deleteAppDataOnUninstall": false, // 是否在卸载时删除应用程序数据(仅作用于一键安装程序)
  17. "runAfterFinish": true, // 完成后是否运行已安装的应用程序(对于辅助安装程序,应删除相应的复选框)
  18. "menuCategory": false, // 是否为开始菜单快捷方式和程序文件目录创建子菜单,如果为true,则使用公司名称
  19. }

npm run build

3.Electron Vscode 输出乱码解决 方案

dev 的时候 加上chcp 65001 输出中文

  1. "dev": "chcp 65001 && vite",

加上之后

4.渲染进程和主进程通信

vite.config.ts 需要修改 不然会报一个错Error: Module "path" has been externalized for browser compatibility. Cannot

只要安装了 vite-plugin-electron 就会带上 vite-plugin-electron-renderer 直接引入用就行

  1. import { defineConfig } from 'vite'
  2. import vue from '@vitejs/plugin-vue'
  3. import electron from 'vite-plugin-electron'
  4. import electronRender from 'vite-plugin-electron-renderer'
  5. // https://vitejs.dev/config/
  6. export default defineConfig({
  7. plugins: [vue(), electron({
  8. main: {
  9. entry: "electron/index.ts"
  10. }
  11. }),electronRender()],
  12. build:{
  13. emptyOutDir: false,
  14. }
  15. })

渲染进程使用ipcRenderer 发送

  1. import { ipcRenderer } from 'electron'
  2. const open = () => {
  3. ipcRenderer.send('openFlyCar')
  4. }

主进程使用 ipcMain 接受

  1. ipcMain.on('openFlyCar',()=>{
  2. console.log('收到')
  3. })

主进程通知渲染进程

  1. const win = new BrowserWindow(xxxxx)
  2. win!.webContents.send('load', { message: "electron初始化了" })

渲染进程接受

  1. ipcRenderer.on('load',(_,data)=>{
  2. console.log(data)
  3. })

5.更多配置查看该插件

vite-plugin-electron: Vite plugin for electron-builder


本文转载自: https://blog.csdn.net/qq1195566313/article/details/126063804
版权归原作者 小满zs 所有, 如有侵权,请联系我们删除。

“小满Vue3第三十九章(Vue开发桌面程序Electron)”的评论:

还没有评论