vite.config.js 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. import { defineConfig } from 'vite'
  2. import react from '@vitejs/plugin-react'
  3. import fs from "fs";
  4. import path from "path";
  5. import chokidar from "chokidar";
  6. import tailwindcss from '@tailwindcss/vite';
  7. // https://vite.dev/config/
  8. function generateIndex(postsDir, outputFile) {
  9. const files = fs.readdirSync(postsDir)
  10. .filter(f => f.endsWith(".md"));
  11. fs.writeFileSync(outputFile, JSON.stringify(files, null, 2));
  12. console.log(`Complete: index.json updated (${files.length} posts)`);
  13. }
  14. function generateIndexPlugin() {
  15. const postsDir = path.resolve("public/posts");
  16. const outputFile = path.resolve("public/posts/index.json");
  17. return {
  18. name: "generate-index-json",
  19. buildStart() {
  20. generateIndex(postsDir, outputFile);
  21. },
  22. configureServer(server) {
  23. const watcher = chokidar.watch(postsDir, { ignoreInitial: true });
  24. const update = () => {
  25. generateIndex(postsDir, outputFile);
  26. server.ws.send({
  27. type: "full-reload",
  28. path: "/posts/index.json"
  29. });
  30. };
  31. watcher.on("add", update);
  32. watcher.on("unlink", update);
  33. watcher.on("change", update);
  34. server.httpServer.on("close", () => watcher.close());
  35. }
  36. };
  37. }
  38. export default defineConfig({
  39. plugins: [react(),generateIndexPlugin(),tailwindcss()],
  40. })