freeleaps_frontend/frontend/vite.config.js
2024-09-13 14:35:27 +00:00

116 lines
3.2 KiB
JavaScript
Executable File

import { fileURLToPath, URL } from 'node:url'
import { defineConfig, loadEnv } from 'vite'
import { createSvgIconsPlugin } from 'vite-plugin-svg-icons'
import vue from '@vitejs/plugin-vue'
const path = require('path')
function resolve(dir) {
return path.join(__dirname, dir);
}
// https://vitejs.dev/config/
export default defineConfig(({ command, mode }) => {
let API_URL = 'http://127.0.0.1:8001'
let WEBSOCKET_URL = 'ws://127.0.0.1:8001'
let PORT = '5173'
let GRAPHQL_PORT = '8001'
if (command === 'serve') {
// dev specific config
console.log('loading environment variables from .env and .env.' + mode + ' under ' + process.cwd())
const env = loadEnv(mode, process.cwd());
API_URL = `${env.VITE_API_URL ?? 'http://127.0.0.1:8001'}`;
WEBSOCKET_URL = `${env.VITE_WEBSOCKET_URL ?? 'ws://127.0.0.1:8001'}`;
PORT = `${env.VITE_PORT ?? '5173'}`;
GRAPHQL_PORT = `${env.VITE_GRAPHQL_PORT ?? '8001'}`;
} else {
// command === 'build'
// build specific config
}
console.log('backend api url: ' + API_URL)
console.log('server port: ' + PORT)
return {
plugins: [
vue(),
createSvgIconsPlugin({
iconDirs: [resolve('src/icons')],
symbolId: 'icon-[name]'
})
],
resolve: {
root: resolve('src'),
alias: {
'@': fileURLToPath(new URL('./src', import.meta.url)),
'~bootstrap': resolve('node_modules/bootstrap')
}
},
css: {
preprocessorOptions: {
scss: {
additionalData: `@import "@/assets/styles/main.scss";`
}
}
},
server: {
proxy: {
'^/api/': {
target: API_URL,
ws: true,
changeOrigin: true,
port: PORT,
},
'^/ws/': {
target: WEBSOCKET_URL,
ws: true,
changeOrigin: true,
port: PORT,
},
'^/graphql': {
target: API_URL,
ws: true,
changeOrigin: true,
port: GRAPHQL_PORT,
}
},
},
optimizeDeps: {
esbuildOptions: {
supported: {
"top-level-await": true
},
},
},
esbuild: {
supported: {
'top-level-await': true //browsers can handle top-level-await features
},
},
// build: {
// chunkSizeWarningLimit: 1500,
// rollupOptions: {
// output: {
// manualChunks(id) {
// if (id.includes("node_modules")) {
// return id.toString().split("node_modules/")[1].split("/")[0].toString()
// }
// },
// entryFileNames: 'js/[name].[hash].js',
// assetFileNames: (assetInfo) => {
// if (assetInfo.name.endsWith(".css")) {
// return "css/[name]-[hash].css";
// }
// return "assets/[name]-[hash].[ext]";
// },
// chunkFileNames: (chunkInfo) => {
// const facadeModuleId = chunkInfo.facadeModuleId ? chunkInfo.facadeModuleId.split('/') : [];
// const fileName = facadeModuleId[facadeModuleId.length - 2] || '[name]';
// return `js/${fileName}/[name].[hash].js`;
// },
// }
// }
// }
}
}
)