首页 > 其他分享 >electron+vite,配置:vite-plugin-electron

electron+vite,配置:vite-plugin-electron

时间:2023-11-09 20:55:05浏览次数:40  
标签:dist plugin win ts electron config vite

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设置typemodule(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文件分开管理。

  1. 使用vite.chonfig.ts文件复制一份名为vite.config.electron.ts的electron专属配置文件。
  2. 删除vite.chonfig.ts中的vite-plugin-electron插件,恢复初始化的样子。
  3. package.json文件添加命令"electron:dev": "chcp 65001 && vite --config vite.config.electron.ts"
  4. chcp 65001:解决控制台中文乱码问题。
  5. 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-builderdistdist-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

相关文章

  • Taurus .Net Core 微服务开源框架:Admin 插件【4-4】 - 配置管理-Mvc【Plugin-CORS 跨
    前言:继上篇:Taurus.NetCore微服务开源框架:Admin插件【4-3】-配置管理-Mvc【Plugin-MicroService微服务】本篇继续介绍下一个内容:系统配置节点:Mvc- Plugin- CORS 跨域界面:界面如下:跨域功能相关配置说明如下:1、CORS.IsEnable:是否启用跨域功能。仅需要开启该功......
  • Vite4+Typescript+Vue3+Pinia 从零搭建(2) - tsconfig配置
    tsconfig配置项目代码同步至码云weiz-vue3-template关于tsconfig的配置字段可查看其他文档,如typeScripttsconfig配置详解tsconfig.json文件修改如下:{"compilerOptions":{"target":"ESNext",//将代码编译为最新版本的JS"useDefineForClassFields":tr......
  • Vite4+Typescript+Vue3+Pinia 从零搭建(1) - 项目初始化
    项目初始化项目代码同步至码云weiz-vue3-template前提准备1.node版本Node.js版本>=12,如果有老项目需要旧版本的,推荐用nvm管理node版本。PSC:\Users\Administrator>nvm--version1.1.11PSC:\Users\Administrator>nvmlist*16.20.2(Currentlyusing64-bit......
  • electron+vite笔记
    1、配置国内electron 镜像   .npmrc   electron_mirror=https://registry.npmmirror.com/-/binary/electron/  electron_builder_binaries_mirror=https://registry.npmmirror.com/-/binary/electron-builder-binaries/2、创建vite项目    pnpmcreate......
  • 用Electron开发一个视频压缩软件
    前段时间用Electron开发了一个图片压缩软件,使用起来很好,然后又想到何不再做一个视频压缩的?公司网站上视频蛮多,每月消耗流量也不是个小数目,这都是钱啦,在清晰度可接受的范围内把视频压缩下,有可能就省一半的流量费。说干就干,开始查资料,首先找到的就是FFMPEG,它号称多媒体业界的瑞士军......
  • uniApp:使用vue3+Vite4+pinia+sass技术栈构建(03)-封装对象类
    1.在src文件夹创建models文件夹import{user}from"@/service/api"//用户信息返回的数据类型interfaceuserInfoType{username:string,phone:string}//返回类型interfaceResultType<T>{errno:number,errmsg:string,datas:T}classuser......
  • uniApp:使用vue3+Vite4+pinia+sass技术栈构建(02)-封装api请求
    前言在纯vue3开发的时候,使用axios进行api请求,但在uniapp中还需要安装axios的适配器uniapp-axios-adapter,否则小程序或者app请求不兼容。文档地址uniapp-axios-adapter-DCloud插件市场但在这里我们不使用axios,而是使用uniapp提供的请求方法uni.request进行封装。uni.request方......
  • 2023-11-06 如何打包Electron项目(未完待续)
    运行打包命令:npmrunmake如图: 打包成功后的目录: 这个名为out的就是打包后的文件所在的地方 my-app-elec-win32-x64为可分发的文件夹 双击它,即可启动! 现在你看到的是运行npmrunmake打包后的开发包,我们接下来要用一个工具(electron-windows-store)来对这个包编......
  • jQuery plugins
    http://jquery.com/http://jqueryui.com/http://www.jqueryrain.com/http://plugins.jquery.com/http://www.jqueryscript.net/http://jqueryhouse.com/ ......
  • 2023-11-06 Could not find any Electron packages in devDependencies ==》没有安装E
    问题描述:electron项目安装好后,运行npmrunstart时报错。解决方案:npmielectron--save-dev推荐使用powershell终端来输入,如果你用的是vscode的终端会出现卡在加载中的情况,而前者则可以通过回车键来刷新加载状态安装完成时重新运行npmrunstart,你会看到欢迎界面: ......