|
|
|
import { fileURLToPath, URL } from "url";
|
|
|
|
import fs from "fs";
|
|
|
|
import { defineConfig, loadEnv } from "vite";
|
|
|
|
import Vue from "@vitejs/plugin-vue";
|
|
|
|
import VueJsx from "@vitejs/plugin-vue-jsx";
|
|
|
|
import Compression from "vite-compression-plugin";
|
|
|
|
import { VitePWA } from "vite-plugin-pwa";
|
|
|
|
import Icons from "unplugin-icons/vite";
|
|
|
|
import { setupLibraryExternal } from "./src/build/library-external";
|
|
|
|
|
|
|
|
export const sharedPlugins = [
|
|
|
|
Vue(),
|
|
|
|
VueJsx(),
|
|
|
|
Compression(),
|
|
|
|
Icons({
|
|
|
|
compiler: "vue3",
|
|
|
|
customCollections: {
|
|
|
|
core: {
|
|
|
|
logo: () => fs.readFileSync("./src/assets/logo.svg", "utf-8"),
|
|
|
|
},
|
|
|
|
},
|
|
|
|
}),
|
|
|
|
VitePWA({
|
|
|
|
manifest: {
|
|
|
|
name: "Halo",
|
|
|
|
short_name: "Halo",
|
|
|
|
description: "Web Client For Halo",
|
|
|
|
theme_color: "#fff",
|
|
|
|
},
|
|
|
|
disable: true,
|
|
|
|
}),
|
|
|
|
];
|
|
|
|
|
|
|
|
export default ({ mode }: { mode: string }) => {
|
|
|
|
const env = loadEnv(mode, process.cwd(), "");
|
|
|
|
const isProduction = mode === "production";
|
|
|
|
|
|
|
|
return defineConfig({
|
|
|
|
base: env.VITE_BASE_URL,
|
|
|
|
plugins: [
|
|
|
|
...sharedPlugins,
|
|
|
|
...setupLibraryExternal(isProduction, env.VITE_BASE_URL),
|
|
|
|
],
|
|
|
|
resolve: {
|
|
|
|
alias: {
|
|
|
|
"@": fileURLToPath(new URL("./src", import.meta.url)),
|
|
|
|
},
|
|
|
|
},
|
|
|
|
server: {
|
|
|
|
port: 3000,
|
|
|
|
},
|
|
|
|
build: {
|
|
|
|
chunkSizeWarningLimit: 2048,
|
|
|
|
},
|
|
|
|
});
|
|
|
|
};
|