vite.config.js 1.2 KB

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