Electron+Vite+Vue3+Ts项目搭建

1,117 阅读3分钟

前言

由于项目需求,搭建个最新的Electron项目,在搭建的过程中,还是发现了一些坑,所以记录一下,整个搭建过程和需要注意的事项。

搭建应用

pnpm create vite electron-vue3

选择vue+ts,运行就看到我们熟悉的的页面,这步应该不会有太多惊喜(意外)。 11.jpg

因为直接使用@/**** 会报错,所以需要配置一下别名

vite.config.ts 配置

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import path from "path" // 这个path用到了安装的@types/node, pnpm install @types/node -D

export default defineConfig({
  plugins: [vue()],
  resolve: {
    alias: {
      '@': path.resolve('./src')
    }
  }
})

tsconfig.json 配置 - 在compilerOptions下面

"baseUrl": "./",	// 解析非相对模块的基地址,默认是当前目录
"paths": {"@/*": ["src/*"]}	// 路径映射,相对于baseUrl

安装electron

  • 1.下载需要用到的相关依赖 electron国内大概率是拉不下来,可以配置一下镜像

    pnpm config set electron_mirror=https://npm.taobao.org/mirrors/electron/

    pnpm config set electron_builder_binaries_mirror=https://npm.taobao.org/mirrors/electron-builder-binaries/

    pnpm install electron -D
    pnpm install electron-builder -D
    pnpm install vite-plugin-electron -D
    
  • 2.创建electron主进程入口 首先在根目录新建 electron/main.ts, 也可以在别的路径

22.jpg

import { app, BrowserWindow } from 'electron';
import { join } from 'path'

// 是否是开发环境
const isDev = process.env.NODE_ENV == "development" ? true : false

const createdWindow = () => {
    const win = new BrowserWindow({
        width: 900, // 窗口宽度
        height: 600, // 窗口高度
        webPreferences: {
            // 指定预加载脚本
            // preload: join(__dirname, 'preload.js'),
            nodeIntegration: true, // 允许在窗口中使用 Node.js 的 API
            contextIsolation: false, // 警告提示
            webSecurity: false // 允许跨域
        }
    })

    console.log(process.env)
    // 主窗口加载URL
    if (isDev) {
        win.loadURL(process.env.VITE_DEV_SERVER_URL); // 使用vite开发服务的url路径访问应用
        // win.webContents.openDevTools() // 开启调试面板
	  } else {
	      win.loadFile(join(__dirname, '../dist/index.html')); // 打包后使用文件路径访问应用
	  }
}

app.whenReady().then(() => {
    createdWindow()
})
  • 3.配置vite.config.ts 我们可以直接在vite.config.ts改,或者拷贝一份改名“vite.config.ts”改。

    import { defineConfig } from 'vite'
    import vue from '@vitejs/plugin-vue'
    import path from "path"
    import electron from 'vite-plugin-electron'
    
    export default defineConfig({
      plugins: [
        vue(),
        electron({
          entry:"electron/main.ts"
        })
      ],
      resolve: {
        alias: {
          '@': path.resolve('./src')
        }
      },
      server: {
        port: 5186,
        host: '0.0.0.0'
      }
    })
    
  • 4.配置package.json 增加运行命令

type字段去除,将入口文件改为dist-electron/main.js

"main": "dist-electron/main.js",
"scripts": {
    "dev": "vite",
    "build": "vue-tsc && vite build",
    "preview": "vite preview",
    "dev:ele": "chcp 65001 && vite --config vite.config.electron.ts",
    "build:ele": "vue-tsc && vite build --config vite.config.electron.ts && electron-builder"
  }

chcp 65001是解决打印中文乱码

--config vite.config.electron.ts 是上面使用了vite.config.electron.ts配置

运行之后我们就可以看到

33.jpg

打包

在package.json添加 build

"build": {
    "appId": "com.a1.a",
    "productName": "electronTest",
    "copyright": "Copyright © 2023",
    "artifactName": "electronTest.exe", // 安装包名
    "win": {
      "icon": "public/logo.png",
      "target": {
        "target": "nsis",
        "arch": [
          "x64",
          "ia32"
        ]
      }
    },
    "mac": {
      "category": "public.app-category.utilities"
    },
    "nsis": {
      "oneClick": false, // 是否一键安装
      "allowToChangeInstallationDirectory": true // 容许用户选择安装位置
    },
    "files": [ // 指定electron-builder需要打包的文件
      "dist/**/*",
      "dist-electron/**/*"
    ],
    "directories": {
      "buildResources": "assets",
      "output": "electron_dist" // 设置出口文件
    },
    "publish": { // 升级用
      "provider": "generic",
      "url": "https://**" // 存储服务器的下载连接。
    }
  }

打包之后文件路径electron_dist

其他

还可以不用vite-plugin-electron方式

运行命令

"electron:dev": "electron .",
"electron:build":"vue-tsc --noEmit && vite build && electron-builder"

如果在ts项目中,需要将electron文件中的ts入口文件先进行打包编译,并设置package.json的入口文件为打包编译后的.js文件作为入口文件例:dist/electron/main.js, 具体验证这里不分享了。

继续挖坑之路...