electron-app-example/plugins/vite.electron.dev.ts
2024-09-21 23:31:33 +08:00

47 lines
1.6 KiB
TypeScript

// 开发环境的插件electron
import type { Plugin } from 'vite'
import type { AddressInfo } from 'node:net'
import { spawn } from 'node:child_process'
import fs from 'node:fs'
const BuildBackground = ()=>{
// 要使用require,需要 在package.json中把type:module删除
// 编译ts脚本为js
require('esbuild').buildSync({
entryPoints: ['src/background.ts'],
bundle: true,
outfile: 'dist/background.js',
platform: 'node',
target: 'node12',
external:['electron']
})
}
// vite 插件要求必须要返回一个有name属性的对象
// 这个对象有很多钩子
export const ElectronDevPlugin = (): Plugin => {
return {
name: 'electron-dev',
configureServer(server){
BuildBackground()
server?.httpServer?.on('listening', () =>{
// 读取vite服务信息
const addressInfo = server.httpServer?.address() as AddressInfo
// 拼接ip地址
const IP = `http://localhost:${addressInfo.port}`
// 进程传参发给electron IP地址
let ElectronProcess = spawn(require('electron'), ['dist/background.js', IP])
fs.watchFile('src/background.ts', ()=>{
ElectronProcess.kill()
BuildBackground()
ElectronProcess = spawn(require('electron'), ['dist/background.js', IP])
})
ElectronProcess.stderr.on('data', (data) => {
console.log('日志', data.toString())
})
})
}
}
}