import fs from 'fs'; import path from 'path'; const SRC_DIR = path.resolve(process.cwd(), 'src'); const PUBLIC_MD_DIR = path.resolve(process.cwd(), 'public/md'); const moveMarkdownFiles = (dir: string) => { // 获取指定目录下的文件 const files = fs.readdirSync(dir); // 遍历文件 files.forEach((file) => { const filePath = path.join(dir, file); const stat = fs.statSync(filePath); if (stat.isDirectory()) { // 如果是目录,递归调用 moveMarkdownFiles(filePath); } else if (file.endsWith('.md')) { // 如果是文件,且是.md文件,复制到public/md目录下 const distPath = path.join(PUBLIC_MD_DIR, path.basename(filePath)); // 检查目标文件是否存在 if (!fs.existsSync(distPath)) { fs.copyFileSync(filePath, distPath); console.log(`自定义vite插件,复制 ${filePath} 到 ${distPath}(新增)`); } else { // 比较文件大小 const sourceFileSize = stat.size; const distFileSize = fs.statSync(distPath).size; if (sourceFileSize !== distFileSize) { fs.copyFileSync(filePath, distPath); console.log(`自定义vite插件,复制 ${filePath} 到 ${distPath}(文件大小不一致)`); } } } }); }; export default function () { // 确保public/md目标目录存在 if (!fs.existsSync(PUBLIC_MD_DIR)) { fs.mkdirSync(PUBLIC_MD_DIR, { recursive: true }); } return { name: 'move-md-plugin', // 开发服务器启动时执行 // configureServer: (server) => { // moveMarkdownFiles(SRC_DIR); // }, // 打包时执行(开发模式下也会执行,所以不需要configureServer) buildStart: () => { moveMarkdownFiles(SRC_DIR); }, }; }