77 lines
2.9 KiB
TypeScript
77 lines
2.9 KiB
TypeScript
import vue from "@vitejs/plugin-vue";
|
||
import vueJsx from "@vitejs/plugin-vue-jsx";
|
||
import { resolve } from "path";
|
||
import { createSvgIconsPlugin } from "vite-plugin-svg-icons";
|
||
import { createStyleImportPlugin, ElementPlusResolve } from "vite-plugin-style-import";
|
||
import eslintPlugin from "vite-plugin-eslint";
|
||
import progress from "vite-plugin-progress";
|
||
import ServerUrlCopy from "vite-plugin-url-copy";
|
||
import vueDevTools from "vite-plugin-vue-devtools";
|
||
import { visualizer } from "rollup-plugin-visualizer";
|
||
import AutoImport from "unplugin-auto-import/vite";
|
||
import Components from "unplugin-vue-components/vite";
|
||
import { ElementPlusResolver } from "unplugin-vue-components/resolvers";
|
||
import { configCompressPlugin } from "./compress";
|
||
|
||
export function getPluginsList(command: string, viteEnv: ImportMetaEnv) {
|
||
const lifecycle = process.env.npm_lifecycle_event;
|
||
return [
|
||
vue(),
|
||
vueJsx(),
|
||
viteEnv.VITE_DEVTOOLS && vueDevTools(),
|
||
eslintPlugin({ cache: false }), // EsLint 报错信息显示在浏览器界面上
|
||
ServerUrlCopy({
|
||
qrcode: {
|
||
disabled: true, // 是否生成二维码
|
||
},
|
||
}),
|
||
|
||
progress(),
|
||
!viteEnv.VITE_LOAD_ALL_EP_STYLE
|
||
? createStyleImportPlugin({
|
||
resolves: [ElementPlusResolve()],
|
||
libs: [
|
||
{
|
||
libraryName: "element-plus",
|
||
esModule: true,
|
||
resolveStyle: name => {
|
||
if (!name.startsWith("el-")) return "";
|
||
return `element-plus/theme-chalk/src/${name.replace(/^el-/, "")}.scss`;
|
||
},
|
||
},
|
||
],
|
||
})
|
||
: undefined,
|
||
|
||
AutoImport({
|
||
imports: ["vue", "vue-router", "pinia"], // 自动引入 vue 的 ref、toRefs、onMounted 等,无需在页面中再次引入
|
||
dts: "src/types/auto-import.d.ts", // 生成在 src 路径下名为 auto-import.d.ts 的声明文件
|
||
eslintrc: {
|
||
enabled: false, // 改为 true 用于生成 eslint 配置。生成后改回 false,避免重复生成消耗
|
||
},
|
||
resolvers: !viteEnv.VITE_LOAD_ALL_EP_COMPONENTS ? [ElementPlusResolver()] : [],
|
||
}),
|
||
|
||
!viteEnv.VITE_LOAD_ALL_EP_COMPONENTS
|
||
? Components({
|
||
resolvers: [ElementPlusResolver({ importStyle: "sass" })],
|
||
dirs: "src/components", // 自定引入需要扫描的组件路径
|
||
dts: "src/types/auto-components.d.ts", // 生成在 src 路径下名为 auto-components.d.ts 的声明文件
|
||
directoryAsNamespace: true,
|
||
})
|
||
: undefined,
|
||
|
||
// 使用 svg 图标
|
||
createSvgIconsPlugin({
|
||
iconDirs: [resolve(process.cwd(), "src/common/assets/icons")],
|
||
symbolId: "icon-[dir]-[name]",
|
||
}),
|
||
|
||
viteEnv.VITE_BUILD_GZIP && configCompressPlugin(viteEnv.VITE_COMPRESSION),
|
||
|
||
// 打包分析
|
||
(lifecycle === "report" || viteEnv.VITE_REPORT) &&
|
||
visualizer({ open: true, brotliSize: true, filename: "report.html" }),
|
||
];
|
||
}
|