UNPKG

create-sf-vue

Version:

一个基于 Vite + Vue3 的项目模板脚手架,支持 TypeScript 和 JavaScript。

89 lines (85 loc) 3.44 kB
import { defineConfig, loadEnv } from "vite"; import type { ConfigEnv, UserConfig } from "vite"; import vue from "@vitejs/plugin-vue"; // Vue 3 支持 import AutoImport from "unplugin-auto-import/vite"; // 自动导入 Vue API 等 import { createSvgIconsPlugin } from "vite-plugin-svg-icons"; // SVG 精灵图插件 import path from "path"; import Components from "unplugin-vue-components/vite"; // 组件自动按需导入 import { ElementPlusResolver } from "unplugin-vue-components/resolvers"; // Element Plus 自动导入解析器 import Icons from "unplugin-icons/vite"; // 图标自动按需导入 import IconsResolver from "unplugin-icons/resolver"; // 图标解析器 import vueDevTools from "vite-plugin-vue-devtools"; // Vue 开发者工具插件 export default defineConfig(async ({ mode }: ConfigEnv): Promise<UserConfig> => { // 加载环境变量 const env = loadEnv(mode, process.cwd()); // 动态导入 UnoCSS 插件,避免直接 import 导致启动慢 const UnoCss = await import("unocss/vite").then((i) => i.default); return { // 开发服务器配置 server: { host: "0.0.0.0", // 本机和局域网可访问 port: +env.VITE_APP_PORT, // 使用环境变量配置端口 open: true, // 启动时自动打开浏览器 proxy: { // 接口代理,解决跨域问题 [env.VITE_APP_BASE_API]: { target: env.VITE_APP_API_URL, changeOrigin: true, rewrite: (path) => path.replace(new RegExp("^" + env.VITE_APP_BASE_API), ""), }, }, }, plugins: [ vue(), // Vue 插件 vueDevTools(), // Vue 开发者工具 UnoCss(), // UnoCSS 插件 AutoImport({ imports: ["vue"], // 自动导入 Vue API(如 ref、reactive) dts: "src/types/auto-imports.d.ts", // 生成 TypeScript 声明文件 eslintrc: { enabled: true, // 生成 ESLint 配置 filepath: "./.eslintrc-auto-import.json", }, resolvers: [ ElementPlusResolver(), // 自动按需导入 Element Plus 组件 IconsResolver({ // 图标组件解析 prefix: "Icon", // 使用 Icon 前缀调用图标组件 }), ], }), createSvgIconsPlugin({ iconDirs: [path.resolve(process.cwd(), "src/assets/icons")], // SVG 图标目录 symbolId: "icon-[dir]-[name]", // 生成 symbolId 格式 }), Components({ dirs: ["src/components", "src/views"], // 扫描组件和页面目录 extensions: ["vue"], // 扫描 .vue 文件 deep: true, // 扫描子目录 resolvers: [ ElementPlusResolver(), // 自动按需导入 Element Plus 组件 IconsResolver({ enabledCollections: ["ep"], // 使用 Element Plus 图标集合 }), ], dts: "src/types/components.d.ts", // 自动生成 TypeScript 组件声明 }), Icons({ autoInstall: true, // 缺少图标自动安装 }), ], css: { preprocessorOptions: { scss: { // 在每个 SCSS 文件开头自动引入全局变量 additionalData: '@use "@/styles/variable.scss" as *;', }, }, }, resolve: { alias: { "@": path.resolve(__dirname, "src"), // @ 别名指向 src }, }, }; });