vite.config.ts 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. import { defineConfig, Plugin, ViteDevServer } from 'vite';
  2. import vue from '@vitejs/plugin-vue';
  3. import vueJsx from '@vitejs/plugin-vue-jsx';
  4. import * as path from 'path';
  5. import * as fs from 'fs';
  6. import formidable from 'formidable';
  7. // https://vitejs.dev/config/
  8. export default defineConfig({
  9. plugins: [vue(), vueJsx(), fileList()],
  10. resolve: {
  11. alias: {
  12. '@': path.resolve(__dirname, './src/'),
  13. '@meta2d': path.resolve(__dirname, '../meta2d.js/packages'),
  14. },
  15. },
  16. build: {
  17. outDir: 'v',
  18. rollupOptions: {
  19. output: {
  20. manualChunks: {
  21. monaco: [`monaco-editor`],
  22. },
  23. },
  24. },
  25. },
  26. server: {
  27. proxy: {
  28. '/image': 'https://2d.le5le.com/',
  29. '/file': 'https://2d.le5le.com/',
  30. '/api': 'https://2d.le5le.com/',
  31. },
  32. },
  33. });
  34. function fileList(): Plugin {
  35. return {
  36. name: 'vite-plugin-svg-png-files',
  37. configureServer(server: ViteDevServer) {
  38. server.middlewares.use((req, res, next) => {
  39. const url = req.url as string;
  40. if (
  41. (url.startsWith('/svg/') ||
  42. url.startsWith('/png/') ||
  43. url.startsWith('/material/')) &&
  44. url.endsWith('/')
  45. ) {
  46. const pwd = decodeURI(path.join(__dirname, 'public', url));
  47. const files = fs.readdirSync(pwd, {
  48. withFileTypes: true,
  49. });
  50. const list: {
  51. name: string;
  52. type?: string;
  53. }[] = [];
  54. for (const item of files) {
  55. if (item.isDirectory()) {
  56. list.push({ name: item.name, type: 'directory' });
  57. } else {
  58. list.push({ name: item.name });
  59. }
  60. }
  61. res.end(JSON.stringify(list));
  62. } else if (url === '/img' && req.method === 'POST') {
  63. const form = formidable({
  64. uploadDir: decodeURI(path.join(__dirname, 'public', '/img')),
  65. keepExtensions: true,
  66. });
  67. form.parse(req, (err, fields, files) => {
  68. if (!err) {
  69. res.end(
  70. JSON.stringify({ url: '/img/' + files.file.newFilename })
  71. );
  72. }
  73. });
  74. } else {
  75. next();
  76. }
  77. });
  78. },
  79. };
  80. }