美文网首页
VUE项目 Electron打包

VUE项目 Electron打包

作者: 闲置的Programmer | 来源:发表于2024-11-28 15:19 被阅读0次

开发完vue项目后想打包成桌面应用程序的话,可以使用electron
在项目根目录加两个文件
1、main.js

// 导入模块
const { app, BrowserWindow } = require("electron");
const path = require("path");

// const NODE_ENV = "development"; //开发环境;//process.env.NODE_ENV;
const NODE_ENV = "process.env.NODE_ENV"; //开发环境;//process.env.NODE_ENV;

// 创建主窗口
const createWindow = () => {
    const mainWindow = new BrowserWindow({
        width: 840,
        height: 800,
        center: true, // 窗口居中显示
        transparent: true, // 设置窗口透明
        // frame: true, //是否显示顶部导航,去掉关闭按钮 最大化最小化按钮
        // titleBarStyle: "hidden", //Windows下创建的窗口是否带边框

        frame: false, // 隐藏默认标题栏和边框
        titleBarStyle: "hiddenInset", // MacOS下使用内嵌式无边框样式

        backgroundColor: "#02243B", //窗口背景
        // fullscreen: true, //全屏设置
        // webPreferences: {
        //     preload: path.join(__dirname, "preload.js"),
        //     nodeIntegration: true, //开启true这一步很重要,目的是为了vue文件中可以引入node和electron相关的API
        //     contextIsolation: true, // 可以使用require方法 // 是否在独立 JavaScript 环境中运行
        //     enableRemoteModule: true, // 可以使用remote方法
        //     webSecurity: false, // 它将禁用同源策略 (通常用来测试网站), 如果此选项不是由开发者设置的默认为true
        //     defaultMonospaceFontSize: 16, //页面字体默认为16
        //     minimumFontSize: 12, //页面字体最小为12
        //     //   v8CacheOptions: "bypassHeatCheckAndEagerCompile", //v8CacheOptions 强制 blink 使用 v8 代码缓存策略  除了编译是及时的。 默认策略是 code。
        // },
    });

    //   // 和自己本地vue项目启动的地址保持一致
    //   mainWindow.loadURL("http://localhost:3000");

    //判断是否为开发环境,开发环境需要更换url
    mainWindow.loadURL(
     "http://localhost:8888/index"
    );
    // 设置窗口菜单栏
    mainWindow.setMenu(null);
    //默认最大化
    mainWindow.maximize();
    //打开
    mainWindow.show();

    // 打开开发工具
    // if (NODE_ENV === "development") {
    //   mainWindow.webContents.openDevTools();
    // }
    // mainWindow.webContents.openDevTools();
    //   // 当窗口被关闭时释放资源
    //   mainWindow.on("closed", function () {
    //     mainWindow = null;
    //   });

    // 监听窗口最大化或最小化事件
    mainWindow.on("maximize", function () {
        console.log("窗口已最大化");
    });

    mainWindow.on("unmaximize", function () {
        console.log("窗口已恢复原始大小");
    });

    // 处理窗口移动事件,例如更新托盘图标提示信息
    mainWindow.on("move", function (event) {
        console.log(`窗口已被移动至新位置`);
    });
};

// 应用准备就绪,加载窗口
app.whenReady().then(() => {
    createWindow();

    // mac 上默认保留一个窗口
    app.on("activate", () => {
        if (BrowserWindow.getAllWindows().length === 0) createWindow();
    });
});

// 关闭所有窗口 : 程序退出 : windows & linux
app.on("window-all-closed", () => {
    if (process.platform !== "darwin") app.quit();
});

2、preload.js 这个是类似浏览器F12的效果,可以不要,我已经在main里注释掉了,想用的话解除main.js里 webPreferences 和打开开发工具那一栏的注释就行

// 所有Node.js API都可以在预加载过程中使用。
// 它拥有与Chrome扩展一样的沙盒。
window.addEventListener("DOMContentLoaded", () => {
    const replaceText = (selector, text) => {
        const element = document.getElementById(selector);
        if (element) element.innerText = text;
    };

    for (const dependency of ["chrome", "node", "electron"]) {
        replaceText(`${dependency}-version`, process.versions[dependency]);
    }
});

3、安装依赖

//运行electron
npm install electron --save-dev

//打包用的
npm install electron-builder --save-dev


4、package.json文件,这里要引入main.js,还得在scripts加启动和打包命令,再把build设置一下就行了

{
  "name": "public-health1",
  "version": "0.0.0",
  "scripts": {
    "dev": "vite",
    "build": "vite build",
    "prettier": "prettier --write .",
    "commit": "cz",
    "serve": "vite preview",
    "electron": "electron .",
    "electron:build": "electron-builder",
  },
  "build": {
    "appId": "com.demo.sxsc",
    "productName": "sxsc",
    "copyright": "Copyright © 2024 <xigua.com>",
    "mac": {
      "category": "public.app-category.utilities"
    },
    "nsis": {
      "oneClick": false,
      "allowToChangeInstallationDirectory": true,
      "deleteAppDataOnUninstall": true
    },
    "files": [
      "dist/**/*",
      "electron/**/*"
    ],
    "directories": {
      "buildResources": "assets",
      "output": "dist_electron"
    }
  },
  "dependencies": {
    "@alicloud/dysmsapi20170525": "^2.0.22",
    "@better-scroll/core": "^2.4.2",
    "@vueup/vue-quill": "^1.1.1",
    "@vueuse/core": "^6.7.5",
    "axios": "^0.19.2",
    "better-scroll": "^2.4.2",
    "echarts": "^5.4.2",
    "element-plus": "^2.3.1",
    "js-cookie": "^3.0.1",
    "js-md5": "^0.7.3",
    "jsencrypt": "^3.3.2",
    "lodash": "^4.17.21",
    "qs": "^6.11.1",
    "vexip-ui": "^2.0.0-beta.15",
    "vue": "^3.2.36",
    "vue-router": "^4.0.14",
    "vuex": "^4.0.2"
  },
  "main": "main.js",
  "devDependencies": {
    "@vitejs/plugin-vue": "^1.10.2",
    "@vue/compiler-sfc": "^3.0.4",
    "commitizen": "^4.2.4",
    "cz-conventional-changelog": "^3.3.0",
    "electron": "^33.2.1",
    "electron-builder": "^25.1.8",
    "electron-packager": "^17.1.2",
    "prettier": "^2.6.2",
    "sass": "^1.43.2",
    "typescript": "^4.4.3",
    "unplugin-auto-import": "^0.6.6",
    "unplugin-vue-components": "^0.17.8",
    "vite": "^2.6.4",
    "vite-plugin-html": "^2.1.2",
    "vite-plugin-mock": "^2.9.6",
    "vite-plugin-style-import": "^1.4.1",
    "vite-plugin-windicss": "^1.8.10",
    "windicss": "^3.5.6"
  },
  "config": {
    "commitizen": {
      "path": "./node_modules/cz-conventional-changelog"
    }
  },
  "eslingConfig": {
    "rules": {
      "vue/no-unused-vars": 0,
      "no-unused-vars": 0
    }
  }
}

6、运行和打包

//运行
npm run electron

//打包
npm run electron:build

7、其他
electron-builder会报错,找不到原因的话就换electron-package打包
配置文件package.json的script里加上"e-package": "electron-packager .",再安装个依赖就行

//安装依赖
npm install electron-packager --save-dev

//package.json的script里加上
"e-package": "electron-packager ."
//运行打包
npm run e-package


相关文章

网友评论

      本文标题:VUE项目 Electron打包

      本文链接:https://www.haomeiwen.com/subject/offksjtx.html