74 lines
1.8 KiB
TypeScript
74 lines
1.8 KiB
TypeScript
import path from "path";
|
|
import { defineConfig } from "vite";
|
|
import vue from "@vitejs/plugin-vue";
|
|
import Icons from "unplugin-icons/vite";
|
|
import Components from "unplugin-vue-components/vite";
|
|
import AutoImport from "unplugin-auto-import/vite";
|
|
import IconsResolver from "unplugin-icons/resolver";
|
|
import Pages from "vite-plugin-pages";
|
|
import Layouts from "vite-plugin-vue-layouts";
|
|
import VueI18n from "@intlify/vite-plugin-vue-i18n";
|
|
|
|
export default defineConfig(({ mode }) => ({
|
|
resolve: {
|
|
alias: {
|
|
"@/": `${path.resolve(__dirname, "assets")}/`,
|
|
},
|
|
},
|
|
base: mode === "production" ? "/{{ .Base }}/" : "/",
|
|
plugins: [
|
|
vue({
|
|
reactivityTransform: true,
|
|
}),
|
|
Icons({
|
|
autoInstall: true,
|
|
}),
|
|
Pages({
|
|
dirs: "assets/pages",
|
|
importMode: "sync",
|
|
}),
|
|
Layouts({
|
|
layoutsDirs: "assets/layouts",
|
|
}),
|
|
Components({
|
|
dirs: ["assets/components"],
|
|
resolvers: [
|
|
IconsResolver({
|
|
componentPrefix: "",
|
|
}),
|
|
],
|
|
|
|
dts: "assets/components.d.ts",
|
|
}),
|
|
AutoImport({
|
|
imports: ["vue", "vue-router", "vue-i18n", "vue/macros", "pinia", "@vueuse/head", "@vueuse/core"],
|
|
dts: "assets/auto-imports.d.ts",
|
|
dirs: ["assets/composables", "assets/stores", "assets/utils"],
|
|
vueTemplate: true,
|
|
}),
|
|
VueI18n({
|
|
runtimeOnly: true,
|
|
compositionOnly: true,
|
|
include: [path.resolve(__dirname, "locales/**")],
|
|
}),
|
|
htmlPlugin(mode),
|
|
],
|
|
server: {
|
|
proxy: {
|
|
"/api": {
|
|
target: "http://localhost:3100/",
|
|
},
|
|
},
|
|
},
|
|
}));
|
|
|
|
const htmlPlugin = (mode) => {
|
|
return {
|
|
name: "html-transform",
|
|
enforce: "post" as const,
|
|
transformIndexHtml(html) {
|
|
return mode === "production" ? html.replaceAll("/{{ .Base }}/", "{{ .Base }}/") : html;
|
|
},
|
|
};
|
|
};
|