| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173 |
- import path from "node:path";
- import process from "node:process";
- import vueLegacy from "@vitejs/plugin-legacy";
- import vue from "@vitejs/plugin-vue";
- import vueJsx from "@vitejs/plugin-vue-jsx";
- import boxen from "boxen";
- import picocolors from "picocolors";
- import Unocss from "unocss/vite";
- import autoImport from "unplugin-auto-import/vite";
- import TurboConsole from "unplugin-turbo-console/vite";
- import components from "unplugin-vue-components/vite";
- import { loadEnv, type PluginOption } from "vite";
- import AppLoading from "vite-plugin-app-loading";
- import Archiver from "vite-plugin-archiver";
- import banner from "vite-plugin-banner";
- import { compression } from "vite-plugin-compression2";
- import { vitePluginFakeServer } from "vite-plugin-fake-server";
- import Pages from "vite-plugin-pages";
- import { createSvgIconsPlugin } from "vite-plugin-svg-icons";
- import VueDevTools from "vite-plugin-vue-devtools";
- import Layouts from "vite-plugin-vue-meta-layouts";
- export default function createVitePlugins(mode: string, isBuild = false) {
- const viteEnv = loadEnv(mode, process.cwd());
- const vitePlugins: (PluginOption | PluginOption[])[] = [
- vue(),
- vueJsx(),
- vueLegacy({
- renderLegacyChunks: false,
- modernPolyfills: ["es.array.at", "es.array.find-last"],
- }),
- // https://github.com/vuejs/devtools-next
- viteEnv.VITE_OPEN_DEVTOOLS === "true" && VueDevTools(),
- // https://github.com/unplugin/unplugin-auto-import
- autoImport({
- imports: ["vue", "vue-router", "pinia"],
- dts: "./src/types/auto-imports.d.ts",
- dirs: ["./src/utils/composables/**"],
- }),
- // https://github.com/unplugin/unplugin-vue-components
- components({
- dirs: ["src/components", "src/layouts/ui-kit"],
- include: [/\.vue$/, /\.vue\?vue/, /\.tsx$/],
- dts: "./src/types/components.d.ts",
- }),
- Unocss(),
- // https://github.com/vbenjs/vite-plugin-svg-icons
- createSvgIconsPlugin({
- iconDirs: [path.resolve(process.cwd(), "src/assets/icons/")],
- symbolId: "icon-[dir]-[name]",
- svgoOptions: isBuild,
- }),
- // https://github.com/condorheroblog/vite-plugin-fake-server
- vitePluginFakeServer({
- logger: !isBuild,
- include: "src/mock",
- infixName: false,
- enableProd: isBuild && viteEnv.VITE_BUILD_MOCK === "true",
- }),
- // https://github.com/dishait/vite-plugin-vue-meta-layouts
- Layouts({
- defaultLayout: "index",
- }),
- // https://github.com/hannoeru/vite-plugin-pages
- Pages({
- dirs: "src/views",
- exclude: ["**/components/**/*.vue"],
- }),
- // https://github.com/nonzzz/vite-plugin-compression
- viteEnv.VITE_BUILD_COMPRESS?.split(",").includes("gzip") && compression(),
- viteEnv.VITE_BUILD_COMPRESS?.split(",").includes("brotli") &&
- compression({
- exclude: [/\.(br)$/, /\.(gz)$/],
- algorithm: "brotliCompress",
- }),
-
- viteEnv.VITE_BUILD_ARCHIVE &&
- Archiver({
- archiveType: viteEnv.VITE_BUILD_ARCHIVE,
- }),
- AppLoading("loading.html"),
- // https://github.com/unplugin/unplugin-turbo-console
- TurboConsole(),
- // https://github.com/chengpeiquan/vite-plugin-banner
- banner(`
- /**
- * 由 Fantastic-admin 提供技术支持
- * Powered by Fantastic-admin
- * https://fantastic-admin.hurui.me
- */
- `),
- {
- name: "vite-plugin-debug-plugin",
- enforce: "pre",
- transform: (code, id) => {
- if (/src\/main.ts$/.test(id)) {
- if (viteEnv.VITE_APP_DEBUG_TOOL === "eruda") {
- code = code.concat(`
- import eruda from 'eruda'
- eruda.init()
- `);
- } else if (viteEnv.VITE_APP_DEBUG_TOOL === "vconsole") {
- code = code.concat(`
- import VConsole from 'vconsole'
- new VConsole()
- `);
- }
- return {
- code,
- map: null,
- };
- }
- },
- },
- {
- name: "vite-plugin-disable-devtool",
- enforce: "pre",
- transform: (code, id) => {
- if (/src\/main.ts$/.test(id)) {
- if (viteEnv.VITE_APP_DISABLE_DEVTOOL === "true") {
- code = code.concat(`
- import DisableDevtool from 'disable-devtool'
- DisableDevtool()
- `);
- }
- return {
- code,
- map: null,
- };
- }
- },
- },
- {
- name: "vite-plugin-terminal-info",
- apply: "serve",
- async buildStart() {
- const { bold, green, cyan, bgGreen, underline } = picocolors;
- // eslint-disable-next-line no-console
- console.log(
- boxen(
- `${bold(
- green(`由 ${bgGreen("Fantastic-admin")} 驱动`)
- )}\n\n${underline(
- "https://fantastic-admin.hurui.me"
- )}\n\n当前使用:${cyan("基础版")}`,
- {
- padding: 1,
- margin: 1,
- borderStyle: "double",
- textAlignment: "center",
- }
- )
- );
- },
- },
- ];
- return vitePlugins;
- }
|