vite.config.ts 2.1 KB

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