VUE项目 Electron打包

开发完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


©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350

推荐阅读更多精彩内容