vite.config.ts 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  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. '/api/device': 'http://127.0.0.1:777/',
  26. },
  27. },
  28. });
  29. function fileList(): Plugin {
  30. return {
  31. name: 'vite-plugin-svg-png-files',
  32. configureServer(server: ViteDevServer) {
  33. server.middlewares.use((req, res, next) => {
  34. const url = req.url as string;
  35. if (
  36. (url.startsWith('/svg/') || url.startsWith('/png/')) &&
  37. url.endsWith('/')
  38. ) {
  39. const pwd = decodeURI(path.join(__dirname, 'public', url));
  40. const files = fs.readdirSync(pwd, {
  41. withFileTypes: true,
  42. });
  43. const list: {
  44. name: string;
  45. type?: string;
  46. }[] = [];
  47. for (const item of files) {
  48. if (item.isDirectory()) {
  49. list.push({ name: item.name, type: 'directory' });
  50. } else {
  51. list.push({ name: item.name });
  52. }
  53. }
  54. res.end(JSON.stringify(list));
  55. } else if (url === '/img' && req.method === 'POST') {
  56. const form = formidable({
  57. uploadDir: decodeURI(path.join(__dirname, 'public', '/img')),
  58. keepExtensions: true,
  59. });
  60. form.parse(req, (err, fields, files) => {
  61. if (!err) {
  62. res.end(
  63. JSON.stringify({ url: '/img/' + files.file.newFilename })
  64. );
  65. }
  66. });
  67. } else {
  68. next();
  69. }
  70. });
  71. },
  72. };
  73. }