@uozi-admin/shared-config
Version:
Easy to configure your admin apps
210 lines (200 loc) • 5.79 kB
JavaScript
// 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
};