vite 插件Demo

写一个打包标签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 }

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值