UNPKG

@uozi-admin/shared-config

Version:

Easy to configure your admin apps

210 lines (200 loc) 5.79 kB
// src/vite/index.ts import process from "process"; import { defineConfig, mergeConfig } from "vite"; // src/vite/config.ts import { resolve } from "path"; import { loadEnv } from "vite"; // src/vite/plugins/index.ts import vue from "@vitejs/plugin-vue"; import vueJsx from "@vitejs/plugin-vue-jsx"; // src/vite/plugins/devTools.ts async function createVueDevToolsPluginConfig(customConfig) { const VueDevTools = await import("vite-plugin-vue-devtools").then((m) => m.default); return VueDevTools({ launchEditor: "code", ...customConfig }); } // src/vite/plugins/unocss.ts import { mergeConfigs, presetAttributify, presetIcons, presetWind3, transformerDirectives, transformerVariantGroup } from "unocss"; import UnoCSS from "unocss/vite"; var defaultConfig = { mode: "global", content: { pipeline: { include: ["**/*.{ts,jsx,tsx,vue}"], exclude: ["node_modules", ".git", "dist"] } }, presets: [ presetWind3({ dark: "class" }), presetAttributify(), presetIcons({ scale: 1.2, warn: true }) ], shortcuts: { // position "common-bg": "bg-truegray-100 dark:bg-truegray-900", "bg-base": "bg-white dark:bg-[#141414]", "text-color-base": "text-black dark:text-white", "pr": "relative", "pa": "absolute", "pf": "fixed", "ps": "sticky", // position layout "position-x-center": "absolute left-1/2 -translate-x-1/2", "pxc": "position-x-center", "position-y-center": "absolute top-1/2 -translate-y-1/2", "pyc": "position-y-center", "position-center": "position-x-center position-y-center", "pc": "position-center", // size "size-0": "w-0 h-0", "size-full": "w-full h-full", "size-screen": "w-screen h-screen", "size-1/2": "w-1/2 h-1/2", // flex layout "flex-center": "flex justify-center items-center", "flex-col-center": "flex-center flex-col", "flex-x-center": "flex justify-center", "flex-y-center": "flex items-center" }, theme: {}, transformers: [ transformerDirectives(), transformerVariantGroup() ] }; function createUnoCSSPluginConfig(customConfig = {}) { return UnoCSS(mergeConfigs([defaultConfig, customConfig])); } // src/vite/plugins/unpluginAutoImport.ts import AutoImport from "unplugin-auto-import/vite"; function createAutoImportPluginConfig(customConfig) { return AutoImport({ imports: [ "vue", "vue-router", "pinia" ], ignoreDts: [ /^ignore_/ ], vueTemplate: true, eslintrc: { enabled: true, // provide path ending with `.mjs` or `.cjs` to generate the file with the respective format filepath: "./.eslint-auto-import.mjs" }, ...customConfig }); } // src/vite/plugins/unpluginVueComponents.ts import { AntdvNextResolver } from "@antdv-next/auto-import-resolver"; import Components from "unplugin-vue-components/vite"; function createVueComponentsPluginConfig(customConfig) { return Components({ extensions: ["vue"], include: [/\.vue$/, /\.vue\?vue/], dts: "components.d.ts", exclude: [/[\\/]node_modules[\\/]/, /[\\/]\.git[\\/]/, /[\\/]\.nuxt[\\/]/], resolvers: [ AntdvNextResolver() ], ...customConfig }); } // src/vite/plugins/index.ts async function configVitePlugins(pluginOptions = {}) { const vitePlugins = []; vitePlugins.push(vue({ script: { defineModel: true }, ...pluginOptions.vue })); pluginOptions.vueJsx !== false && vitePlugins.push(vueJsx(pluginOptions.vueJsx)); pluginOptions.autoImport !== false && vitePlugins.push(createAutoImportPluginConfig(pluginOptions.autoImport)); pluginOptions.vueComponents !== false && vitePlugins.push(createVueComponentsPluginConfig(pluginOptions.vueComponents)); pluginOptions.unocss !== false && vitePlugins.push(createUnoCSSPluginConfig(pluginOptions.unocss)); if (pluginOptions.devTools !== false) { vitePlugins.push(await createVueDevToolsPluginConfig(pluginOptions.devTools)); } return vitePlugins; } // src/vite/config.ts async function createApplicationViteConfig(mode, root, pluginsOptions) { const env = loadEnv(mode, root, ""); const plugins = await configVitePlugins(pluginsOptions); const applicationConfig = { resolve: { alias: { "~": resolve(root, "src") }, extensions: [ ".mjs", ".js", ".ts", ".jsx", ".tsx", ".json", ".vue", ".less" ] }, css: { preprocessorOptions: { less: { modifyVars: { "border-radius-base": "5px" }, javascriptEnabled: true } } }, server: { proxy: { "/api": { target: env.VITE_PROXY_TARGET || "http://localhost:9000", changeOrigin: true, secure: false, ws: true, rewrite: (path) => path.replace(env.VITE_API_ROOT || "/api", "") } } }, build: { chunkSizeWarningLimit: 5e3 }, plugins }; return applicationConfig; } // src/vite/index.ts function mergeConfigs2(configs) { return configs.reduce((mergedConfig, config) => { return mergeConfig(mergedConfig, config); }, {}); } async function createViteConfig(applicationViteConfigOptions = {}) { const { overrides = {}, pluginOptions = {} } = applicationViteConfigOptions; const root = process.cwd(); return defineConfig(async (env) => { if (typeof overrides === "function") return mergeConfigs2([await createApplicationViteConfig(env.mode, root, pluginOptions), await overrides(env)]); return mergeConfigs2([await createApplicationViteConfig(env.mode, root, pluginOptions), overrides]); }); } export { createViteConfig, mergeConfigs2 as mergeConfigs };