123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- import { defineConfig, Plugin, ViteDevServer } from 'vite';
- import vue from '@vitejs/plugin-vue';
- import vueJsx from '@vitejs/plugin-vue-jsx';
- import * as path from 'path';
- import * as fs from 'fs';
- import formidable from 'formidable';
- // https://vitejs.dev/config/
- export default defineConfig({
- plugins: [vue(), vueJsx(), fileList()],
- resolve: {
- alias: {
- '@': path.resolve(__dirname, './src/'),
- '@meta2d': path.resolve(__dirname, '../meta2d.js/packages'),
- },
- },
- build: {
- outDir: 'v',
- rollupOptions: {
- output: {
- manualChunks: {
- monaco: [`monaco-editor`],
- },
- },
- },
- },
- server: {
- proxy: {
- '/image': 'https://2d.le5le.com/',
- '/file': 'https://2d.le5le.com/',
- '/api': 'https://2d.le5le.com/',
- },
- },
- });
- function fileList(): Plugin {
- return {
- name: 'vite-plugin-svg-png-files',
- configureServer(server: ViteDevServer) {
- server.middlewares.use((req, res, next) => {
- const url = req.url as string;
- if (
- (url.startsWith('/svg/') ||
- url.startsWith('/png/') ||
- url.startsWith('/material/')) &&
- url.endsWith('/')
- ) {
- const pwd = decodeURI(path.join(__dirname, 'public', url));
- const files = fs.readdirSync(pwd, {
- withFileTypes: true,
- });
- const list: {
- name: string;
- type?: string;
- }[] = [];
- for (const item of files) {
- if (item.isDirectory()) {
- list.push({ name: item.name, type: 'directory' });
- } else {
- list.push({ name: item.name });
- }
- }
- res.end(JSON.stringify(list));
- } else if (url === '/img' && req.method === 'POST') {
- const form = formidable({
- uploadDir: decodeURI(path.join(__dirname, 'public', '/img')),
- keepExtensions: true,
- });
- form.parse(req, (err, fields, files) => {
- if (!err) {
- res.end(
- JSON.stringify({ url: '/img/' + files.file.newFilename })
- );
- }
- });
- } else {
- next();
- }
- });
- },
- };
- }
|