vite.config.ts 2.3 KB

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