electron-app-c1-launcher/plugins/vite.electron.build.ts
2024-10-08 18:38:51 +08:00

70 lines
2.5 KiB
TypeScript

import type { Plugin } from 'vite'
import fs from 'node:fs'
import * as electronBuilder from 'electron-builder'
import path from 'node:path'
// 生产环境的插件electron
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']
})
require('esbuild').buildSync({
entryPoints: ['src/AfterPack.ts'],
bundle: true,
outfile: 'tool/AfterPack.js',
platform: 'node',
target: 'node12',
external:['electron']
})
}
// 打包 需要先等vite打完包之后就有index.html 在执行electron-builder打包
export const ElectronBuildPlugin = (): Plugin => {
return {
name: 'electron-build',
closeBundle(){
BuildBackground()
//electron-builder 需要制定package.json main
const json = JSON.parse(fs.readFileSync('package.json', 'utf-8'))
json.main = 'background.js'
fs.writeFileSync('dist/package.json', JSON.stringify(json, null, 4))
// bug electron-builder 他会给你下载垃圾文件
fs.mkdirSync('dist/node_modules')
electronBuilder.build({
config:{ // 通常是文件 electron-builder.yml
directories: {
output: path.resolve(process.cwd(), 'release'),
app: path.resolve(process.cwd(), 'dist'),
},
appId: 'com.c1.game.launcher',
productName: 'c1-game-launcher',
win: {
icon: path.resolve(process.cwd(), 'src/assets/app/logo.ico'), // 指定图标文件路径
target: [
{
target: 'portable', // 安装模式: nsis 单文件启动: portable
arch: ['x64']
}
]
},
afterPack: path.resolve(process.cwd(), 'tool/afterPack.js')
}
})
.then(() => {
console.log('Build successful!')
})
.catch((error) => {
console.error('Error during build:', error)
})
}
}
}