当前位置:   article > 正文

Vue3+Electron+AntV 从项目构建到打包发布_electron antd vue

electron antd vue

引言

本文使用"vue-cli-plugin-electron-builder"插件,将vue项目和electron结合,同样适用于已有的vue项目打包成electron项目。

包管理工具推荐使用yarn,使用体验优于npm,可查看文档 yarn使用

npm install -g yarn

注意设置代理

yarn config set registry https://registry.npm.taobao.org

一些基础工具的版本如下:

  1. node: 16.15.0
  2. yarn: 1.22.19
  3. vue: 3.2.13
  4. @vue/cli: 5.0.8
  5. electron: 25.5.0
  6. "ant-design-vue": "^4.0.1",

项目搭建

1.创建vue项目

首先下载vue脚手架:

  1. // npm
  2. npm i @vue/cli -g
  3. // yarn
  4. yarn add @vue/cli -g

创建项目:

vue create projectName   // projectName 替换为实际项目名称如vue-electron-demo

之后会有很多选项供选择,按需选择即可,示例:

自动安装相关依赖后,按提示切换至项目目录,运行即可。

如使用yarn,可能需要重新构建node_modules包,运行yarn install

  1. cd vue-electron-demo
  2. yarn install
  3. yarn serve

2.引入AntV

可根据AntV官网示例引入ant-design-vue,注意对应版本号,每个版本的引入方式略有差异。

以ant-design-vue@4.0.1为例:

yarn add ant-design-vue@4.0.1

采用全局引入方式,修改根目录下main.js文件

  1. // main.js
  2. import { createApp } from "vue";
  3. import App from "./App.vue";
  4. import router from "./router";
  5. import Antd from "ant-design-vue";
  6. import "ant-design-vue/dist/reset.css";
  7. createApp(App).use(router).use(Antd).mount("#app");

测试是否引入成功,修改src/views/HomeView.vue 组件

  1. // HomeView.vue
  2. <template>
  3. <div class="home">
  4. <img alt="Vue logo" src="../assets/logo.png" />
  5. </div>
  6. <a-button type="primary">测试AntV按钮</a-button>
  7. </template>
  8. <script></script>

出现按钮即引入antV成功。

3.引入Electron

由于国内网络问题,最好针对electron设置镜像地址

yarn:

    yarn config set electron_mirror  "https://npm.taobao.org/mirrors/electron/"

npm:

     npm config set electron_mirror  "https://npm.taobao.org/mirrors/electron/"

  1. yarn add vue-cli-plugin-electron-builder -D
  2. yarn add electron -D
  3. vue add electron-builder

 运行vue add electron-builder后,会在package.json中自动生成一些配置项。

 自动生成一个background.js文件(对应package.json的"main"),该文件为electron入口文件。

 此时文件如下:

  1. // package.json
  2. {
  3. "name": "vue-electron-demo",
  4. "version": "0.1.0",
  5. "private": true,
  6. "author": "liuyuanfa",
  7. "description": "a demo project based on Vue+Electron",
  8. "scripts": {
  9. "serve": "vue-cli-service serve",
  10. "build": "vue-cli-service build",
  11. "lint": "vue-cli-service lint",
  12. "electron:build": "vue-cli-service electron:build",
  13. "electron:serve": "vue-cli-service electron:serve",
  14. "postinstall": "electron-builder install-app-deps",
  15. "postuninstall": "electron-builder install-app-deps"
  16. },
  17. "main": "background.js", // electron入口文件
  18. "dependencies": {
  19. "ant-design-vue": "4.0.1",
  20. "core-js": "^3.8.3",
  21. "vue": "^3.2.13",
  22. "vue-router": "^4.0.3"
  23. },
  24. "devDependencies": {
  25. "@babel/core": "^7.12.16",
  26. "@babel/eslint-parser": "^7.12.16",
  27. "@vue/cli-plugin-babel": "~5.0.0",
  28. "@vue/cli-plugin-eslint": "~5.0.0",
  29. "@vue/cli-plugin-router": "~5.0.0",
  30. "@vue/cli-service": "~5.0.0",
  31. "electron": "^26.1.0",
  32. "electron-devtools-installer": "^3.1.0",
  33. "eslint": "^7.32.0",
  34. "eslint-plugin-vue": "^8.0.3",
  35. "vue-cli-plugin-electron-builder": "~2.1.1"
  36. }
  37. }
  1. // background.js
  2. "use strict";
  3. import { app, protocol, BrowserWindow } from "electron";
  4. import { createProtocol } from "vue-cli-plugin-electron-builder/lib";
  5. import installExtension, { VUEJS3_DEVTOOLS } from "electron-devtools-installer";
  6. const isDevelopment = process.env.NODE_ENV !== "production";
  7. protocol.registerSchemesAsPrivileged([
  8. { scheme: "app", privileges: { secure: true, standard: true } },
  9. ]);
  10. async function createWindow() {
  11. // 应用窗口配置
  12. const win = new BrowserWindow({
  13. width: 800,
  14. height: 600,
  15. webPreferences: {
  16. nodeIntegration: process.env.ELECTRON_NODE_INTEGRATION,
  17. contextIsolation: !process.env.ELECTRON_NODE_INTEGRATION,
  18. },
  19. });
  20. if (process.env.WEBPACK_DEV_SERVER_URL) {
  21. // 开发调试时
  22. await win.loadURL(process.env.WEBPACK_DEV_SERVER_URL);
  23. // 自动打开调试窗口,不需要可注释
  24. // if (!process.env.IS_TEST) win.webContents.openDevTools();
  25. } else {
  26. // 打包后文件路径
  27. createProtocol("app");
  28. win.loadURL("app://./index.html");
  29. }
  30. }
  31. app.on("window-all-closed", () => {
  32. if (process.platform !== "darwin") {
  33. app.quit();
  34. }
  35. });
  36. app.on("activate", () => {
  37. if (BrowserWindow.getAllWindows().length === 0) createWindow();
  38. });
  39. app.on("ready", async () => {
  40. // 调试工具,可注释
  41. // if (isDevelopment && !process.env.IS_TEST) {
  42. // try {
  43. // await installExtension(VUEJS3_DEVTOOLS);
  44. // } catch (e) {
  45. // console.error("Vue Devtools failed to install:", e.toString());
  46. // }
  47. // }
  48. createWindow();
  49. });
  50. if (isDevelopment) {
  51. if (process.platform === "win32") {
  52. process.on("message", (data) => {
  53. if (data === "graceful-exit") {
  54. app.quit();
  55. }
  56. });
  57. } else {
  58. process.on("SIGTERM", () => {
  59. app.quit();
  60. });
  61. }
  62. }

 此时,直接运行即可

yarn electron:serve

 成功示例:

如需打开调试工具,点击应用窗口 View -- Toggle Developer Tools即可,与浏览器调试工具一致

至此,成功将vue项目与electron结合,代码更改也会在electron窗口同步热更新

项目打包

打包有个需要注意的地方,electron不支持history路由,如果vue的路由设置成history模式,会导致打包后页面空白,因此需要修改路由文件

  1. // src/router/index.js
  2. import {
  3. createRouter,
  4. createWebHistory,
  5. createWebHashHistory,
  6. } from "vue-router";
  7. import HomeView from "../views/HomeView.vue";
  8. const routes = [
  9. {
  10. path: "/",
  11. name: "home",
  12. component: HomeView,
  13. },
  14. {
  15. path: "/about",
  16. name: "about",
  17. component: () =>
  18. import(/* webpackChunkName: "about" */ "../views/AboutView.vue"),
  19. },
  20. ];
  21. const router = createRouter({
  22. // history: createWebHistory(process.env.BASE_URL),
  23. history: process.env.IS_ELECTRON
  24. ? createWebHashHistory(process.env.BASE_URL)
  25. : createWebHistory(process.env.BASE_URL),
  26. routes,
  27. });
  28. export default router;

 打包相关配置

 electron打包配置写在vue.config.js中,此处设置的打包输出文件夹为output

  1. // vue.config.js
  2. const { defineConfig } = require("@vue/cli-service");
  3. module.exports = defineConfig({
  4. transpileDependencies: true,
  5. pluginOptions: {
  6. electronBuilder: {
  7. builderOptions: {
  8. appId: "this.is.vue-electron-demo", // appId,自行设置
  9. productName: "vue-electron-demo", // 产品名称
  10. electronDownload: {
  11. mirror: "https://npm.taobao.org/mirrors/electron/",
  12. },
  13. directories: {
  14. output: "output", // 打包后的文件夹,自行设置
  15. },
  16. asar: true,
  17. mac: {
  18. target: "dmg",
  19. icon: "build/icons/icon.icns",
  20. },
  21. win: {
  22. // Windows平台的配置
  23. target: "nsis", // 打包的目标格式为NSIS安装程序
  24. icon: "build/icons/icon.ico", // Windows平台的图标路径
  25. publisherName: "liuyuanfa", // 发布者名称
  26. },
  27. linux: {
  28. target: ["AppImage", "deb"],
  29. },
  30. nsis: {
  31. oneClick: false, // 是否一键安装
  32. language: "2052", // 语言设为中文
  33. perMachine: true, // 安装程序将给电脑所有用户安装
  34. allowElevation: true, // 允许提升安装程序权限
  35. allowToChangeInstallationDirectory: true, // 允许用户选择安装目录
  36. createDesktopShortcut: true, // 创建桌面快捷方式
  37. createStartMenuShortcut: false, // 创建开始菜单快捷方式
  38. shortcutName: "vue-electron-demo", // 快捷方式的名称
  39. },
  40. },
  41. },
  42. },
  43. });

  这只是最基础的配置内容,其余复杂内容给自行配置,接下即可运行命令打包

yarn electron:build

  成功示例

打开output文件夹可看到以下内容

vue-electron-demo Setup 0.1.0.exe 即为程序安装包,点击即可安装应用

win-unpacked为免安装版,打开后找到 .exe文件可直接运行

运行示例:

至此,一个vue+electron+antV 的demo项目就完成了。如果是已有的vue项目,从第三步引入Electron开始照做即可。

示例代码git地址

https://github.com/liuyuanfa/vue-electron-demo

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

闽ICP备14008679号