vite.config.ts 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  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/') || url.startsWith('/png/')) &&
  42. url.endsWith('/')
  43. ) {
  44. const pwd = decodeURI(path.join(__dirname, 'public', url));
  45. const files = fs.readdirSync(pwd, {
  46. withFileTypes: true,
  47. });
  48. const list: {
  49. name: string;
  50. type?: string;
  51. }[] = [];
  52. for (const item of files) {
  53. if (item.isDirectory()) {
  54. list.push({ name: item.name, type: 'directory' });
  55. } else {
  56. list.push({ name: item.name });
  57. }
  58. }
  59. res.end(JSON.stringify(list));
  60. } else if (url === '/img' && req.method === 'POST') {
  61. const form = formidable({
  62. uploadDir: decodeURI(path.join(__dirname, 'public', '/img')),
  63. keepExtensions: true,
  64. });
  65. form.parse(req, (err, fields, files) => {
  66. if (!err) {
  67. res.end(
  68. JSON.stringify({ url: '/img/' + files.file.newFilename })
  69. );
  70. }
  71. });
  72. } else {
  73. next();
  74. }
  75. });
  76. },
  77. };
  78. }