# electron 打包已有 vue 项目

假设 已有 vue 项目的目录是 targetVue/

# 准备

安装 electron 和 electron-packager

npm install electron --save-dev
npm install electron-packager -g

# 入口

新建文件 targetVue/electronmain.js

这里 electronmain.js 作为 electron 的入口文件,文件名可以修改,只要保证在项目中是一致的即可

const electron = require("electron");

// node.js 模块
const url = require("url");
const path = require("path");

const { app, BrowserWindow } = electron;

let mainWindow;

// 监听 应用 ready
app.on("ready", () => {
  // 创建浏览器窗口
  mainWindow = new BrowserWindow({});

  // dev || prod
  mainWindow.loadFile(
    url.format({
      pathname: path.join(__dirname, "index.html"),
      protocol: null,
      slashes: true
    })
  );
  // 或
  // mainWindow.loadFile(`${__dirname}/index.html`);

  // 打开开发者工具
  // mainWindow.webContents.openDevTools();

  // 当 window 被关闭,这个事件会被触发。
  mainWindow.on("closed", () => {
    app.quit();
  });
});

# 脚本

修改 targetVue/config/index.js 中 build 的 assetsPublicPath

 build:{
   assetsPublicPath: './', // 这里 / 改为 ./
 }

修改 targetVue/package.json

添加如下脚本

{
  "main": "electronmain.js",
  "scripts": {
    "electron_cp": "cp electronmain.js dist/ && cp package.json dist/",
    "electron_dev": "npm run build && npm run electron_cp && electron dist/electronmain.js",
    "electron_build": "npm run build && npm run electron_cp && electron-packager ./dist/ test --out release --overwrite"
  }
}

main:electron 入口文件,缺失的话 build 后的应用会报错

electron_cp:复制执行 electron 必要的文件。实际上 targetVue/electronmain.js 并不是必要的,不过为了方便在没有 dist 目录前设置,就通过复制的方法传入 targetVue/dist/

electron_dev:开发环境

electron_build:打包生产环境

electron-packager:./dist/表示将 dist 目录下所有文件打包 test 表示打包之后的名字 --out 表示输出 release 表示输出路径 --overwrite 表示覆盖

# 打包

# 执行
npm run electron_build

最终打完的包在 targetVue/release/ 目录下

这里只是进行了简单的打包,实际过程中还需要继续丰富入口文件的代码,并对项目中的部分功能进行改写。

提示

本方法不需要修改原来的项目结构,适合基本不需要做后续修改的项目使用

提示

如果项目仍在迭代更新阶段,推荐使用 electron-vue 来改造,虽然会在一定程度上更改项目的结构,但可以在开发阶段热更新

提示

如果能确定项目一定是在线运行的,离线就无法使用,只是需要一个类似于 chrome 的客户端,可以考虑直接用 electron 或 electron-vue 的模板,修改访问地址为项目运行的网址

发布时间: 2019-12-13 00:31:04
更新时间: 2021-03-10 13:42:24