写一个打包标签vite 插件demo
import { Plugin } from 'vite'
import fs from 'fs'
import path from 'path'
interface Config {
output?: string
filename?: string
fileType?: 'text' | 'ts' | 'js' | 'json' | string
[keyname: string]: any
}
const viteBuildSignPlugin: (options: Config) => Plugin = function (options?: Config) {
const { dir = './dist', filtname = 'build-sign', fileType = 'html' } = options || {}
return {
name: 'vite-build-sign',
// Vite 独有钩子
config(config) {
// console.log('config')
},
// Vite 独有钩子
configResolved(resolvedCofnig) {
// console.log('configResolved')
},
// 通用钩子
options(opts) {
console.log('options')
return opts
},
// Vite 独有钩子
configureServer(server) {
// console.log('configureServer')
// setTimeout(() => {
// // 手动退出进程
// process.kill(process.pid, 'SIGTERM')
// }, 3000)
},
// 通用钩子
buildStart() {
// console.log('buildStart')
// 获取当前时间
},
// 通用钩子
buildEnd() {
// console.log('buildEnd')
},
// 通用钩子
closeBundle() {
const root = process.cwd()
const env = process.env
const packageJsonPath = root + '/package.json'
const buildTime = new Date().toISOString()
// 读取并解析 package.json 文件
let npm_package_version = (env && env.npm_package_version) || ''
if (!npm_package_version) {
try {
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'))
if (packageJson) {
npm_package_version = packageJson.version
}
} finally {
}
}
// 构建文件内容,导出当前时间
const fileContent = `<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
</head>
build time:${buildTime}\nversion: ${npm_package_version}\n
</html>`
// 写入文件
const outputDir = path.resolve(dir) // 假设文件写入到输出目录
const filePath = path.join(outputDir, `${filtname}.${fileType}`)
fs.writeFileSync(filePath, fileContent)
// console.log('closeBundle')
},
}
}
export { viteBuildSignPlugin }