vite + electron-builder 打包配置详解

目录
  • 创一个vite项目
    • 安装打包工具
    • 配置桌面环境
  • 创建 主进程 main.js
    • 添加electron 运行命令
    • 打包项目,生成dist
    • 解决资源无法加载
  • 开发环境:热更新
    • 两个工具 concurrently wait-on
  • 打包exe
    • 解决index.html找不到的问题

创一个vite项目

    npm init vite

安装打包工具

    npm i -D electron               // 20.1.0
    npm i -D electron-builder       // 23.3.3

electron是开发时运行环境,electron-builder是打包exe用的。

配置桌面环境

打开 electron 官网,找到“快速开始”。基本上看完这一章就可以实现将页面通过桌面程序运行出来了。

创建 主进程 main.js

项目更目录下创建 main.js文件与 preload.js 文件, 代码可以直接复制官网示例

// main.js
// Modules to control application life and create native browser window
const { app, BrowserWindow } = require('electron')
const path = require('path')
const createWindow = () => {
  // Create the browser window.
  const mainWindow = new BrowserWindow({
    width: 800,
    height: 600,
    webPreferences: {
      preload: path.join(__dirname, 'preload.js')
    }
  })
  // 加载 index.html
  mainWindow.loadFile('index.html')
  // 打开开发工具
  // mainWindow.webContents.openDevTools()
}
// 这段程序将会在 Electron 结束初始化
// 和创建浏览器窗口的时候调用
// 部分 API 在 ready 事件触发后才能使用。
app.whenReady().then(() => {
  createWindow()
  app.on('activate', () => {
    // On macOS it's common to re-create a window in the app when the
    // dock icon is clicked and there are no other windows open.
    if (BrowserWindow.getAllWindows().length === 0) createWindow()
  })
})
// 除了 macOS 外,当所有窗口都被关闭的时候退出程序。 There, it's common
// for applications and their menu bar to stay active until the user quits
// explicitly with Cmd + Q.
app.on('window-all-closed', () => {
  if (process.platform !== 'darwin') app.quit()
})
// In this file you can include the rest of your app's specific main process
// code. 也可以拆分成几个文件,然后用 require 导入。
// preload.js
// All the Node.js APIs are available in the preload process.
// 它拥有与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])
  }
})

添加electron 运行命令

打开 package.json 在 scrpit 对象中添加 electron 运行命令

    "scripts": {
    "dev": "vite --host",
    "build": "vite build",
    "preview": "vite preview",
    "start": "electron .",
  },

打包项目,生成dist

运行 npm run build, 生成dist文件。并且将main.js中mainWindow.loadFile路径修改为 './dist/index.html'

    const createWindow = () => {
  // Create the browser window.
  const mainWindow = new BrowserWindow({
    width: 800,
    height: 600,
    webPreferences: {
      preload: path.join(__dirname, '/preload.js')
    }
  })
  // 加载 index.html
  // mainWindow.loadFile('index.html')
  mainWindow.loadFile('./dist/index.html')
  // 打开开发工具
  // mainWindow.webContents.openDevTools()
}

最后运行 npm run start

解决资源无法加载

最后运行出来会发现是白屏,打开程序控制台可以看到是js文件找不到。 打开dist中index.html发现是js和css路径都是绝对路径,所以这里需要修改为相对路径。

打开 vite.config.js 配置更路径为相对路径

export default defineConfig({
  plugins: [vue()],
  base: './',
})

然后重新打包,再运行npm run start 就可以看到页面了。

开发环境:热更新

这里在开发环境中有一个问题就是,咱们这里的渲染进程是打包好的dist文件,无法每次修改后热更新。只有重新打包生成新的dist后页面才会更新。这在开发的时候显然是方便的。

两个工具 concurrently wait-on

    npm i concurrently -D
    npm i wait-on -D
  • concurrently:方便 script 同时启动多个命令
  • wait-on:它可以等待文件、端口、套接字和 http(s) 资源可用后触发。

开发时热更新,我们就要放弃build一个dist文件来作为渲染进程的做法了。 简单来说,我们正常执行 npm run dev 生成一个页面服务,这样的环境是有热更新的。所以我们只需要在主进程中加载dev服务中的页面作为渲染进程就可以了。 修改一下主进程 main.js

    ...
    const createWindow = () => {
      // Create the browser window.
      const mainWindow = new BrowserWindow({
        width: 800,
        height: 600,
        webPreferences: {
          preload: path.join(__dirname, "/preload.js"),
        },
      });
      // 加载 index.html
      mainWindow.loadURL("http://localhost:3333/");
      // 打开开发工具
      // mainWindow.webContents.openDevTools()
    };
    ...

然后打开两个终端,第一个先执行 npm run dev,等待服务启动后在另外一个里执行npm run start 即可。

当然我们也可以一个命令完成这些。在package.json中添加命令:

    ...
    "scripts": {
        "dev": "vite --host",
        "build": "vite build",
        "preview": "vite preview",
        "start": "electron .",
        "electron": "wait-on tcp:3333 && electron .",
        "exe-dev": "concurrently -k \"npm run dev\" \"npm run electron\""
      },
    ...

开发时执行 exe-dev 即可。

打包exe

添加打包命令

    ...
    "scripts": {
        "dev": "vite --host",
        "build": "vite build",
        "preview": "vite preview",
        "start": "electron .",
        "electron": "wait-on tcp:3333 && electron .",
        "exe-dev": "concurrently -k \"npm run dev\" \"npm run electron\"",
        "exe-build": "electron-builder"
      },
    ...

执行 npm run exe-build ,等待执行结束,dist文件夹下会多一个win-unpacked,其里面有一个exe文件就是我们的程序执行文件。

现在我们加载的还是dev服务,所以还需要修改一下主进程main.js

    ...
      // 加载 index.html
      // 判断当前是否为开发环境
      console.log("isPackaged: ", app.isPackaged);
      if (!app.isPackaged) {
        mainWindow.loadURL("http://localhost:3333/");
      } else {
        mainWindow.loadFile("./dist/index.html");
      }
    ...

app.isPackaged 主要用来判断是否为开发环境。

解决index.html找不到的问题

我们打开win-unpacked,执行exe文件,会发现页面没有内容,打开F12控制台,发现index.html根本没有找到。

其地址 ...dist/win-unpacked/resources/app.asar/dist/index.html,找不到的原因可以大概猜一下是我们的页面没有打包进app.asar中。

所以我们可以在electron-builder打包配置中设置一下我们要打包的文件。

项目更目录创建 electron.config.json

{
  "files": ["main.js", "preload.js", "./dist"],
  "productName": "test"
}

这里我们设置了files字段,其目的就是设置打包的数据内容。 productName 就是设置exe文件的文件名。

然后修改exe-build命令

    "exe-build": "electron-builder -config electron.config.json"

运行命令后,可以看到exe文件已经修改为test.exe。双击运行也可以看到页面了。

最后完善一下打包命令

    "exe-build": "vite build & electron-builder -config electron.config.json"

以上就是vite + electron-builder 打包配置详解的详细内容,更多关于vite + electron-builder 打包配置的资料请关注我们其它相关文章!

(0)

相关推荐

  • 详解Electron中如何使用SQLite存储笔记

    目录 前言 数据库的选择 安装 创建表 Service Controller 业务 总结 前言 上一篇,我们使用 remirror 实现了一个简单的 markdown 编辑器.接下来,我们要学习如何去存储这些笔记. 当然了,你也可以选择不使用数据库,不过若是你以后需要将该应用上架到 mac Apple Store ,就需要考虑这个了.因为上架 mac 应用需要启用 sandbox,当你第一次访问笔记中的媒体文件时,都要打开选择文件的弹窗,通过让用户主动选择来授权访问沙箱外的媒体文件.不过,如果你

  • vue electron实现无边框窗口示例详解

    目录 一.前言 二.实现方案 1.创建无边框窗口 2.创建windows窗口控件组件 三.后记 一.前言 无边框窗口是不带外壳(包括窗口边框.工具栏等),只含有网页内容的窗口.对于一个产品来讲,桌面应用带边框的很少,因为丑(我们的UI觉得--与我无关-.-).因此我们就来展开说下,在做无边框窗口时候需要注意的事项以及我踩过的坑. 二.实现方案 1.创建无边框窗口 要创建无边框窗口,只需在 BrowserWindow的 options 中将 frame 设置为 false: const { Bro

  • AntDesignPro使用electron构建桌面应用示例详解

    目录 注意事项声明 主要分为两个部分 开发环境使用 打包应用配置 package.json配置打包后的路径方式 使用 electron-builder 打包 exe 文件或者安装包,压缩包 安装 package.json添加命令 (打包windows) 添加打包配置 执行打包命令 使用 electron-packager 打包成 exe 文件 执行命令 提示 注意事项声明 所有 node 包必须使用 npm 安装不可使用 cnpm, 使用 cnpm 安装的 node 包会导致打包时间无限可能 具

  • Electron学习应用程序打包实例详解

    目录 引言 如何将应用程序打包(Win) 1.关于package.js文件详解 2.使用electron-packager打包 3.使用electron-builder打包 整体感受 效果 引言 人真的是会变得越来越懒的,也正是人的惰性吧,真的是很讽刺. 关于这个应用程序的开发,断更了很久,但是代码部分还算没落下吧,终于在周一.周二终把这个应用程序写完了. 开发完不是终点.而是打包后可以使用才真的算是结束吧. 如何将应用程序打包(Win) 1.关于package.js文件详解 完整实例如下: j

  • Web Worker线程解决方案electron踩坑记录

    目录 初始化项目 编写入口文件和 electron 插件 websocket websocket 服务 连接 websocket 服务 发送心跳 取消心跳 重新连接 其它优化 Worker 初始化项目 electron 开发时会遇到一对多的情况,在进行 websocket 通信时,如果接收到服务端多个指令时,而这个指令刚好需要占用线程,这个时候整个界面就会失去响应,那么我们就可以使用线程来解决这个问题. npm create vite@latest electron-worker 执行完后修改

  • vite + electron-builder 打包配置详解

    目录 创一个vite项目 安装打包工具 配置桌面环境 创建 主进程 main.js 添加electron 运行命令 打包项目,生成dist 解决资源无法加载 开发环境:热更新 两个工具 concurrently wait-on 打包exe 解决index.html找不到的问题 创一个vite项目 npm init vite 安装打包工具 npm i -D electron // 20.1.0 npm i -D electron-builder // 23.3.3 electron是开发时运行环境

  • electron-builder打包配置详解

    目录 1.基础配置 2.打包目标配置 3.其他平台配置 4.nsis配置 5.关于操作系统的配置 6.更新配置 这里介绍的是直接在package.json中直接配置使用: 1.基础配置 "build": {  // 这里是electron-builder的配置     "productName":"xxxx",//项目名 这也是生成的exe文件的前缀名     "appId": "com.xxx.xxxxx"

  • webpack多入口文件页面打包配置详解

    大多数情况下,我们使用 webpack来打包单页应用程序,这个时候只需要配置一个入口,一个模板文件,但也不尽是如此,有时候也会碰到多页面的项目,而且以我的经验来看,这种情况出现的频率还不低,例如项目比较大,无法进行全局的把握,或者项目需要多次的更新迭代等,都适合做成多页面程序,这就涉及到了 webpack的多页面文件的打包配置问题. 手动配置 单页应用程序和多页应用程序的 webpack配置文件其实绝大部分都还是相同的,只不过多页的配置需要在单页配置的基础上顾及到多个页面罢了,loader.ou

  • Maven 命令行打包 和 pom.xml的常用配置详解

    maven 命令行打包 mvn -v, --show-version 现在最新的maven版本是 3.6,我这里用的还是 2017 年下载的 3.1.1 版本(虽然有点过时,但是大版本不变,指令基本一样) mvn -h, --help 使用 help 命令可以看到 maven 命令的帮助文档,下面主要介绍两个常用的指令 -- D 和 P. mvn -D, --define <arg> mvn -DpropertyName=propertyValue clean package 可以用来临时定义

  • vue3+electron12+dll开发客户端配置详解

    当前使用的版本为 @vue/cli4 创建的 vue3.0 + typescript + electron 12 版本创建,其他版本暂未测试.网上资料良莠不齐,因此花费时间依次试验,达到一个目前最优解. 修改仓库源 由于electron版本的未知性,可能存在serve可用而build之后打开白屏的情况,因此需要谨慎对待.最好在版本可用的情况下commit一个版本,方便代码回滚,如果谁有更好的资料希望共享. 在开始配置前,可以将yarn和npm的rc文件稍作修改,使用命令或者文件直接修改.npmr

  • webpack项目中使用vite加速的兼容模式详解

    目录 前言 目的 要处理的问题 动手 共用 index.html 共用配置 兼容环境变量 自动导入 资源引入 svg-sprite-loader 替代方案 其他 效果 前言 随着公司前端工程越来越大,启动是无尽的等待,修改是焦急的等待. vite 到现在生态也起来了,就有了把项目改造成 vite 的想法,但是项目后面可能要依赖 qiankun 改造成微前端项目,现在 qiankun 对 vite 还没有好的解决方法,我就想采取一个折中的办法,保留 webpack,再兼容 vite,两条路都留着.

  • vue 项目常用加载器及配置详解

    本文介绍了vue 项目常用加载器及配置详解,分享给大家,具体如下: 1.安装sass: 1.1 由于sass-loader依赖于node-sass,所以在安装sass-loader的同时还需安装node-sass npm install --save-dev node-sass npm install --save-dev sass-loader 1.2 安装完成后修改 <style>标签: <style lang="scss"></style> 2

  • vue-cli3全面配置详解

    本文介绍了vue-cli3全面配置详解,分享给大家,具体如下: vue-cli3-config 创建项目 配置环境变量 通过在package.json里的scripts配置项中添加--mode xxx来选择不同环境 在项目根目录中新建.env, .env.production, .env.analyz等文件 只有以 VUE_APP_ 开头的变量会被 webpack.DefinePlugin 静态嵌入到客户端侧的包中,代码中可以通过process.env.VUE_APP_BASE_API访问 NO

  • Glide4 高效加载图片的配置详解

    本文介绍了Glide4 高效加载图片的配置详解,分享给大家,具体如下: 在build.gradle中添加glide依赖 // glide 依赖 compile 'com.github.bumptech.glide:glide:4.6.1' // glide 相关注解,生成GlideApp代码 annotationProcessor 'com.github.bumptech.glide:compiler:4.6.1' // Glide网络库配置成okhttp3 compile ('com.gith

随机推荐