当前位置:   article > 正文

vue3 + vite + electron_electron+vite+vue3模板

electron+vite+vue3模板

踩了很多坑,(现在也不是最优解,electron包体积过大一直是一个很伤的问题)希望给你带了帮助。

首先是目录:

 首先:

        npm create vite@latest my-vue-app -- --template vue  // 搭建vite + vue3

        npm i                                                                             // 安装依赖

        npm install electron --save-dev                                     // 安装electron包

做好前期工作:

在src同级文件夹下新建 electron 文件夹,在里面添加 main.js 和 preload.js 

main.js:(注释很详细)

  1. // electron/main.js
  2. // 控制应用生命周期和创建原生浏览器窗口的模组
  3. const {app, BrowserWindow, ipcMain, globalShortcut} = require('electron')
  4. const electron = require('electron')
  5. const path = require('path')
  6. const NODE_ENV = process.env.NODE_ENV
  7. console.log('NODE_ENV')
  8. let mainWindow = null
  9. const Menu = electron.Menu
  10. function createWindow() {
  11. // 隐藏菜单栏
  12. Menu.setApplicationMenu(null)
  13. // 创建浏览器窗口
  14. mainWindow = new BrowserWindow({
  15. width: 1920, height: 1080, frame: false,//无边框
  16. icon: path.join(__dirname, './public/icons/girl.ico'),
  17. // icon:path.join(__dirname,"../src/assets/logo/logo.ico"),//窗口图标
  18. webPreferences: {
  19. nodeIntegration: true,
  20. enableRemoteModule: true,
  21. contextIsolation: false,
  22. preload: path.join(__dirname, 'preload.js')
  23. }
  24. })
  25. // 加载 index.html
  26. // mainWindow.loadFile('dist/index.html') 将该行改为下面这一行,加载url
  27. mainWindow.loadURL(NODE_ENV === 'development' ? 'http://localhost:3000' : `file://${path.join(__dirname, '../dist/index.html')}`);
  28. // 打开开发工具
  29. // if (NODE_ENV === "development") {
  30. // mainWindow.webContents.openDevTools()
  31. // }
  32. }
  33. // 这段程序将会在 Electron 结束初始化
  34. // 和创建浏览器窗口的时候调用
  35. // 部分 API 在 ready 事件触发后才能使用。
  36. app.whenReady().then(() => {
  37. createWindow()
  38. app.on('activate', function () {
  39. // 通常在 macOS 上,当点击 dock 中的应用程序图标时,如果没有其他
  40. // 打开的窗口,那么程序会重新创建一个窗口。
  41. if (BrowserWindow.getAllWindows().length === 0) createWindow()
  42. })
  43. app.on('window-all-closed', function () {
  44. console.log("收到关闭信号")
  45. if (process.platform !== 'darwin') app.quit()
  46. })
  47. })
  48. // 除了 macOS 外,当所有窗口都被关闭的时候退出程序。 因此,通常对程序和它们在
  49. // 任务栏上的图标来说,应当保持活跃状态,直到用户使用 Cmd + Q 退出。
  50. // 在这个文件中,你可以包含应用程序剩余的所有部分的代码,
  51. // 也可以拆分成几个文件,然后用 require 导入。
  52. ipcMain.on('window-close', function () {
  53. mainWindow.close()
  54. app.exit(0)
  55. })

preload.js:

  1. // 所有Node.js API都可以在预加载过程中使用。
  2. window.addEventListener('DOMContentLoaded', () => {
  3. const replaceText = (selector, text) => {
  4. const element = document.getElementById(selector)
  5. if (element) element.innerText = text
  6. }
  7. for (const dependency of ['chrome', 'node', 'electron']) {
  8. replaceText(`${dependency}-version`, process.versions[dependency])
  9. }
  10. })

完成上面两个文件的写入后,还需配置 package.json配置文件:

  1. {
  2. "name": "vite_electron_1",
  3. "version": "0.0.0",
  4. "main": "electron/main.js",
  5. "scripts": {
  6. "dev": "vite",
  7. "build": "vite build",
  8. "serve": "vite preview",
  9. "electron": " cross-env NODE_ENV=development electron .",
  10. "electron:serve": "concurrently -k \"npm run dev\" \"npm run electron\"",
  11. "electron:build": "vite build && electron-builder"
  12. },
  13. "dependencies": {
  14. "axios": "^1.1.3",
  15. "echarts": "^5.4.0",
  16. "element-plus": "^2.2.26",
  17. "less": "^4.1.3",
  18. "lottie-web": "^5.10.0",
  19. "node": "^19.2.0",
  20. "pinia": "^2.0.26",
  21. "socket.io-client": "^4.6.1",
  22. "unplugin-auto-import": "^0.12.0",
  23. "unplugin-vue-components": "^0.22.11",
  24. "vite-plugin-electron": "^0.11.1",
  25. "vite-plugin-electron-renderer": "^0.12.1",
  26. "vue": "^3.2.16",
  27. "vue-router": "^4.1.6",
  28. "wavesurfer.js": "^6.4.0"
  29. },
  30. "devDependencies": {
  31. "@vitejs/plugin-vue": "^1.9.3",
  32. "concurrently": "^7.6.0",
  33. "cross-env": "^7.0.3",
  34. "electron": "^15.2.0",
  35. "electron-builder": "^22.13.1",
  36. "vite": "^2.6.4",
  37. "wait-on": "^7.0.1"
  38. },
  39. "build": {
  40. "productName": "DTS",
  41. "appId": "com.dvs.yuan",
  42. "copyright": "Copyright © 2023 Yuan",
  43. "mac": {
  44. "category": "public.app-category.utilities"
  45. },
  46. "win": {
  47. "target": "nsis",
  48. "icon": "./public/girl.ico"
  49. },
  50. "nsis": {
  51. "oneClick": false,
  52. "allowToChangeInstallationDirectory": true,
  53. "installerIcon": "./public/girl.ico",
  54. "uninstallerIcon": "./public/girl.ico",
  55. "installerHeaderIcon": "./public/girl.ico",
  56. "createDesktopShortcut": true,
  57. "createStartMenuShortcut": true,
  58. "shortcutName": "DTS"
  59. },
  60. "files": [
  61. "dist/**/*",
  62. "electron/**/*"
  63. ],
  64. "directories": {
  65. "buildResources": "assets",
  66. "output": "dist_electron"
  67. }
  68. }
  69. }

vite.config.js

  1. import {defineConfig, loadEnv} from 'vite'
  2. import vue from '@vitejs/plugin-vue'
  3. import {resolve} from 'path'
  4. import electron from 'vite-plugin-electron'
  5. // 安装 vite-plugin-electron 的时候,就同时安装了 vite-plugin-electron-renderer
  6. import electronRender from 'vite-plugin-electron-renderer'
  7. import AutoImport from "unplugin-auto-import/vite"
  8. import Components from 'unplugin-vue-components/vite'
  9. import {ElementPlusResolver} from 'unplugin-vue-components/resolvers'
  10. export default ({mode}) => {
  11. // const env = loadEnv(mode, process.cwd())
  12. return {
  13. // base: env.VITE_STATIC_IMG,
  14. base: "./", // 新增
  15. plugins: [vue(),
  16. electronRender(),
  17. AutoImport({resolvers: [ElementPlusResolver()]}),
  18. Components({resolvers: [ElementPlusResolver()]}),
  19. ], //路径简略符
  20. resolve: {
  21. alias: {
  22. '@': resolve(__dirname, 'src')
  23. }
  24. }, // 代理
  25. server: {
  26. proxy: {
  27. '/api': {
  28. target: 'http://47.110.59.201:8081/api',
  29. changeOrigin: true,
  30. rewrite: (path) => path.replace(/^\/api/, '')
  31. }
  32. }
  33. }
  34. }
  35. }

vue.config.js

  1. module.exports = {
  2. pluginOptions: {
  3. electronBuilder: {
  4. nodeIntegration: true,
  5. }
  6. }
  7. }

完成这些就已经可以(运行,打包)项目啦。

在此多提一嘴:(electron就是一个外壳(浏览器)里面的还是我们写的页面)

所以想要像真正桌面应用那样(双击头部全屏,可拖动缩放应用,退出应用...)需要一些配置

退出app:在你的.vue 页面中 

  1. import electron from "electron";
  2. //关闭屏幕
  3. const closeScreen = () => {
  4. electron.ipcRenderer.send('window-close')
  5. }

可拖拽

  1. //可拖动头部从而拖动页面
  2. .header {
  3. -webkit-app-region: drag;
  4. //需要键鼠交互的模块
  5. .start {
  6. -webkit-app-region: no-drag;

end...

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/人工智能uu/article/detail/936105
推荐阅读
相关标签
  

闽ICP备14008679号