import { createUnplugin } from 'unplugin' import type { Options } from './types' export default createUnplugin((options = {}) => { const { metaFileName = 'meta.json', generateOnBuild = true, devMock = true, injectComponent = false, // 由于跨构建工具自动注入组件复杂,建议用户手动注册组件 } = options return { name: 'unplugin-version-checker', enforce: 'post', writeBundle() { if (!generateOnBuild) return const versionInfo = { buildTime: new Date().toISOString(), version: process.env.BUILD_ID || process.env.npm_package_version, commitHash: process.env.COMMIT_SHORT || process.env.GIT_COMMIT_SHORT, } this.emitFile({ type: 'asset', fileName: metaFileName, source: JSON.stringify(versionInfo, null, 2), }) }, configureServer(server) { if (!devMock) return server.middlewares.use((req, res, next) => { if (req.url === `/${metaFileName}`) { res.setHeader('Content-Type', 'application/json') res.end(JSON.stringify({ buildTime: new Date().toISOString(), version: 'dev', commitHash: 'dev', })) return } next() }) } } })