1、创建vite项目,安装electron,electron从23开始不支持win7,win8.1所以我用最后一个版本
pnpm create vite
pnpm ADD -D [email protected]
pnpm i vite-plugin-electron -D
2、创建electron的主进程文件
electron的main.ts和preload.ts
//const { app, BrowserWindow, screen } = require("electron"); import { app, BrowserWindow, screen } from "electron"; //const path = require("path"); import path from "path"; const createWindow = () => { const win = new BrowserWindow({ width: 800, height: 600, x: 0, y: 0, frame: false, // 隐藏窗口的顶部菜单栏和标题栏 webPreferences: { nodeIntegration: true, contextIsolation: true, preload: path.join(__dirname, "preload.js"), }, //webPreferences: { preload: path.join(__dirname, "preload.ts") }, }); // 获取主屏幕的分辨率 const screenRect = screen.getPrimaryDisplay().bounds; console.log( `Screen Width: ${screenRect.width}, Screen Height: ${screenRect.height}` ); // 设置窗口大小和位置 win.setBounds({ x: 0, y: 0, width: screenRect.width, height: screenRect.height, }); console.log(process.env.npm_lifecycle_event); // if (process.env.npm_lifecycle_event === "start") { // win.loadURL("http://127.0.0.1:3212"); // win.webContents.openDevTools(); // //快捷命令shift+ctrl+i // } else { // win.loadFile("dist/index.html"); // } if (process.env.VITE_DEV_SERVER_URL) { win.loadURL(process.env.VITE_DEV_SERVER_URL); win.webContents.openDevTools(); } else { win.loadFile(path.join(__dirname, "index.htm")); } //win.loadURL("http://127.0.0.1:3211"); }; app.whenReady().then(() => { createWindow(); app.on("activate", () => { if (BrowserWindow.getAllWindows().length == 0) { createWindow(); } }); app.on("window-all-closed", () => { if (process.platform !== "darwin") app.quit(); }); });
3、在vite.config.ts中配置electron的入口文件预编译,生成js文件
import { defineConfig } from "vite"; import vue from "@vitejs/plugin-vue"; import electron from "vite-plugin-electron"; // https://vitejs.dev/config/ export default defineConfig({ plugins: [ vue(), electron([ { entry: "electron/main.ts", // preload: { // // Shortcut of `build.rollupOptions.input` // input: "electron/preload.ts", // }, // // Optional: Use Node.js API in the Renderer process // renderer: {}, vite: { build: { outDir: "dist-electron" } }, }, { entry: "electron/preload.ts", vite: { build: { outDir: "dist-electron" } }, }, ]), ], server: { port: 3212, }, });
我把它输出到dist-electron文件夹下面,与srl同级
4、修改package.json,main入口,和防止乱码chcp 65001
由于electron
主进程是使用的node
环境,而默认情况下,Node.js 使用的是 CommonJS 模块规范,而 import
语句属于 ECMAScript 模块规范,两者不兼容。所以需要使用编译为 CommonJS 规范的dist-electron/main.js
作为main
属性的入口文件,否则会报es6语法错误。
由于dist-electron文件夹下是打包编译后的CommonJS
模块规范的代码,当package.json设置type
为module(ECMAScript模块规范)
时将会将无法识别 CommonJS 模块规范的语法从而产生报错。此时就可以删除type:module
或者将 type 的值设置为"commonjs"
即可。因为不设置 type 时 Node.js 会默认使用 CommonJS 模块系统。
chcp 65001
是 Windows 系统下的一个命令,用于将控制台的代码页设置为 UTF-8 编码。在默认情况下,Windows 控制台使用的是 GBK 或者其他本地编码,导致在控制台中输出中文等非 ASCII 字符时可能会出现乱码。 使用 chcp 65001
命令可以将控制台的代码页设置为 UTF-8 编码,以便正确显示中文等非 ASCII 字符。
5、开发web端与electron分离
搭建已经搭建好的工程目前只能启动electron桌面端的服务,如果需要启动web
端服务的话需要将vite.config.ts
中的plugins
中的electron
插件注释掉。这样非常麻烦,所以并不是我想要的效果。我将会使用不同的脚本命令启动不同服务,并且实现web端、electron端的项目打包。
我还是喜欢使用插件的方式对开发环境跟打包配置
当执行pnpm dev
命令时会默认读取vite.config.ts文件中的配置信息启动开发服务,此时由于使用了vite-plugin-electron
插件。所以就会启动electron的开发环境。
因此我们需要按照以下步骤新增一个electron
服务的config
文件与web服务的config
文件分开管理。
- 使用
vite.chonfig.ts
文件复制一份名为vite.config.electron.ts
的electron专属配置文件。 - 删除
vite.chonfig.ts
中的vite-plugin-electron
插件,恢复初始化的样子。 - 在
package.json
文件添加命令"electron:dev": "chcp 65001 && vite --config vite.config.electron.ts"
chcp 65001:
解决控制台中文乱码问题。vite --config vite.config.electron.ts:
指定vite运行时的配置文件。
{ "name": "electron_vite", "private": true, "version": "1.0.0", "main": "dist-electron/main.js", "type": "commonjs", "scripts": { "dev": "chcp 65001&&vite", "build": "vue-tsc && vite build", "preview": "vite preview", "electron:dev": "chcp 65001&&vite --config vite.config.electron.ts" }, "dependencies": { "vue": "^3.3.4" }, "devDependencies": { "@vitejs/plugin-vue": "^4.2.3", "electron": "v22.3.27", "typescript": "^5.0.2", "vite": "^4.4.5", "vite-plugin-electron": "^0.15.4", "vue-tsc": "^1.8.5" } }
6、打包 pnpm i i electron-builder -D 在
package.json
添加脚本。
"electron:build": "vue-tsc && vite build --config vite.config.electron.ts && electron-builder"
在electron/main.ts
中配置应用加载路径。
//const { app, BrowserWindow, screen } = require("electron"); import { app, BrowserWindow, screen } from "electron"; //const path = require("path"); import path from "path"; const createWindow = () => { const win = new BrowserWindow({ width: 800, height: 600, x: 0, y: 0, frame: false, // 隐藏窗口的顶部菜单栏和标题栏 webPreferences: { nodeIntegration: true, contextIsolation: true, preload: path.join(__dirname, "preload.js"), }, //webPreferences: { preload: path.join(__dirname, "preload.ts") }, }); // 获取主屏幕的分辨率 const screenRect = screen.getPrimaryDisplay().bounds; console.log( `Screen Width: ${screenRect.width}, Screen Height: ${screenRect.height}` ); // 设置窗口大小和位置 win.setBounds({ x: 0, y: 0, width: screenRect.width, height: screenRect.height, }); console.log(process.env.npm_lifecycle_event); // if (process.env.npm_lifecycle_event === "start") { // win.loadURL("http://127.0.0.1:3212"); // win.webContents.openDevTools(); // //快捷命令shift+ctrl+i // } else { // win.loadFile("dist/index.html"); // } if (process.env.VITE_DEV_SERVER_URL) { win.loadURL(process.env.VITE_DEV_SERVER_URL); win.webContents.openDevTools(); } else { win.loadFile(path.join(__dirname, "../dist/index.html")); } //win.loadURL("http://127.0.0.1:3211"); }; app.whenReady().then(() => { createWindow(); app.on("activate", () => { if (BrowserWindow.getAllWindows().length == 0) { createWindow(); } }); app.on("window-all-closed", () => { if (process.platform !== "darwin") app.quit(); }); });
在根目录新增一个electron-builder.json
文件设置electron-builder
打包配置,src
文件夹同级
/** electron-builder.json */ // 暂时先设置这两个配置防止打包后的应用出现的各种问题。(后面解释为什么需要设置) { "files": ["dist/**/*", "dist-electron/**/*"], // 设置需要打包的文件 "directories": { "output": "release" // 设置出口文件 } }
dist
:由vite
打包后的产物。dist-electron
:由vite-plugin-electron
插件编译打包后生成的产物(为了将ts文件编译为js文件)。release
:由electron-builder
将dist
跟dist-electron
合并打包后生成的产物,其中的文件无需关注,目前我们仅关注.exe
文件即可
这样就成功了
7、调试 我们一般调试出现白屏,大部分是路径加载的问题
如果是对
electron
打包后出现bug
不知道如何排查,在解决打包后产生的各类bug
之前,需要先安装一个.asar
压缩文件的解压工具,使用asar
解压工具将electron打包后的app.asar
解压后查看,方便快速排查解决部分打包文件路径不对造成的bug
。
全局安装asar
依赖。
pnpm add -g asar
进入release/win-unpacked/resources
文件夹
打开终端执行asar extract app.asar ./
命令即可查看打包后的文件目录。
执行后
根据自己的路径查找白屏路径问题
,其他问题可以打开调试工具,快捷方式:shift+Ctrl+i,查看进行调试
主要记住打包i路径,
标签:dist,plugin,win,ts,electron,config,vite From: https://www.cnblogs.com/wx18638101223/p/17822581.html