mirror of https://github.com/1Panel-dev/1Panel
appstorecrontabdatabasedockerdocker-composedocker-containerdocker-imagedocker-uifilemanagerlamplnmppanel
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
99 lines
3.3 KiB
99 lines
3.3 KiB
import { defineConfig, loadEnv, ConfigEnv, UserConfig } from 'vite'; |
|
import { createHtmlPlugin } from 'vite-plugin-html'; |
|
import vue from '@vitejs/plugin-vue'; |
|
import { resolve } from 'path'; |
|
import { wrapperEnv } from './src/utils/get-env'; |
|
import { visualizer } from 'rollup-plugin-visualizer'; |
|
import viteCompression from 'vite-plugin-compression'; |
|
import VueSetupExtend from 'vite-plugin-vue-setup-extend'; |
|
import eslintPlugin from 'vite-plugin-eslint'; |
|
import vueJsx from '@vitejs/plugin-vue-jsx'; |
|
import DefineOptions from 'unplugin-vue-define-options/vite'; |
|
import MonacoEditorPlugin from 'vite-plugin-monaco-editor'; |
|
|
|
// @see: https://vitejs.dev/config/ |
|
export default defineConfig(({ mode }: ConfigEnv): UserConfig => { |
|
const env = loadEnv(mode, process.cwd()); |
|
const viteEnv = wrapperEnv(env); |
|
|
|
return { |
|
// base: '/kubepi', |
|
// alias config |
|
resolve: { |
|
alias: { |
|
'@': resolve(__dirname, './src'), |
|
'vue-i18n': 'vue-i18n/dist/vue-i18n.cjs.js', |
|
}, |
|
}, |
|
// global css |
|
css: { |
|
preprocessorOptions: { |
|
scss: { |
|
additionalData: `@use "@/styles/var.scss" as *;`, |
|
}, |
|
}, |
|
}, |
|
server: { |
|
port: viteEnv.VITE_PORT, |
|
open: viteEnv.VITE_OPEN, |
|
// host: '0.0.0.0', |
|
// https: false, |
|
proxy: { |
|
// '/1panel': { |
|
// target: 'http://0.0.0.0:4004', |
|
// }, |
|
'/api/v1': { |
|
target: 'http://127.0.0.1:9999', |
|
changeOrigin: true, |
|
// rewrite: (path) => path.replace(/^\/api/, ''), |
|
}, |
|
}, |
|
}, |
|
plugins: [ |
|
vue(), |
|
createHtmlPlugin({ |
|
inject: { |
|
data: { |
|
title: viteEnv.VITE_GLOB_APP_TITLE, |
|
}, |
|
}, |
|
}), |
|
DefineOptions(), |
|
// * EsLint 报错信息显示在浏览器界面上 |
|
eslintPlugin({ |
|
exclude: ['**/*.js'], |
|
}), |
|
// * vite 可以使用 jsx/tsx 语法 |
|
vueJsx(), |
|
// * name 可以写在 script 标签上 |
|
VueSetupExtend(), |
|
|
|
MonacoEditorPlugin({}), |
|
viteEnv.VITE_REPORT && visualizer(), |
|
// * gzip compress |
|
viteEnv.VITE_BUILD_GZIP && |
|
viteCompression({ |
|
verbose: true, |
|
disable: false, |
|
threshold: 10240, |
|
algorithm: 'gzip', |
|
ext: '.gz', |
|
}), |
|
], |
|
esbuild: { |
|
pure: viteEnv.VITE_DROP_CONSOLE ? ['console.log', 'debugger'] : [], |
|
}, |
|
build: { |
|
outDir: '../cmd/server/web', |
|
minify: 'esbuild', |
|
rollupOptions: { |
|
output: { |
|
// Static resource classification and packaging |
|
chunkFileNames: 'assets/js/[name]-[hash].js', |
|
entryFileNames: 'assets/js/[name]-[hash].js', |
|
assetFileNames: 'assets/[ext]/[name]-[hash].[ext]', |
|
}, |
|
}, |
|
}, |
|
}; |
|
});
|
|
|