UNPKG

@tianyio/quality-helper

Version:

A comprehensive quality helper tool for project scaffolding and management

178 lines (169 loc) 5.57 kB
import { defineConfig, mergeConfig, type UserConfig } from 'vite' import { resolve } from 'path' import federation from '@originjs/vite-plugin-federation' import legacy from '@vitejs/plugin-legacy' import VueDevTools from 'vite-plugin-vue-devtools' import AutoImport from 'unplugin-auto-import/vite' import Components from 'unplugin-vue-components/vite' import IconsResolver from 'unplugin-icons/resolver' import Icons from 'unplugin-icons/vite' import { FileSystemIconLoader } from 'unplugin-icons/loaders' export default defineConfig(env => { const config: UserConfig = { // 路径别名 resolve: { alias: { '@components': resolve(__dirname, 'src/components'), '@utils': resolve(__dirname, 'src/utils'), '@styles': resolve(__dirname, 'src/styles'), '@assets': resolve(__dirname, 'src/assets'), '@views': resolve(__dirname, 'src/views'), '@api': resolve(__dirname, 'src/api'), }, }, plugins: [ ...(env.command === 'serve' ? [VueDevTools()] : []), // 浏览器兼容性插件 - 提供完整的旧版浏览器支持 legacy({ // 自动读取 .browserslistrc 配置 // targets: 在 .browserslistrc 中配置 // 额外的 polyfill 支持 additionalLegacyPolyfills: [ 'regenerator-runtime/runtime', // async/await 支持 ], // 现代浏览器 polyfill(按需加载) modernPolyfills: [ 'es.array.flat', 'es.array.flat-map', 'es.object.from-entries', 'es.string.replace-all', ], // 渲染 legacy chunks 的条件 renderLegacyChunks: true, // 生成 polyfill chunks polyfills: ['es.array.iterator', 'es.promise', 'es.object.assign', 'es.promise.finally'], }), federation({ name: 'main-app', remotes: { 'sub-app': 'http://localhost:5002/assets/sub-app.js', }, filename: 'main-app.js', exposes: { './SubApp': './src/SubApp.vue', }, shared: { vue: { requiredVersion: '^3.2.13', }, 'vue-router': { requiredVersion: '^4.0.12', }, pinia: { requiredVersion: '^2.0.0-beta.1', }, }, }), AutoImport({ dts: resolve(__dirname, './types/auto-imports.d.ts'), // 生成类型声明文件,提供完整的TypeScript支持 imports: [ // Vue 3 核心API 'vue', // Vue Router 'vue-router', // Pinia 'pinia', { // VueUse 工具库 - 如果使用 // '@vueuse/core': [ // // 常用钩子 // 'useWindowSize', // 'useScroll', // ], }, ], resolvers: [ // UI库解析器 // ElementPlusResolver({ importStyle: 'sass' }) // AntDesignVueResolver() ], // 生成类型声明文件的配置 eslintrc: { enabled: true, // 生成 .eslintrc-auto-import.json 文件 filepath: resolve(__dirname, './.eslintrc-auto-import.json'), // 生成文件路径 globalsPropValue: true, // 生成全局变量声明 }, }), Components({ dts: resolve(__dirname, './types/components.d.ts'), // 生成类型声明文件,提供完整的TypeScript支持 directoryAsNamespace: true, // 将目录作为命名空间 // 解析器配置 resolvers: [ // UI库解析器(根据需要启用) // ElementPlusResolver({ // importStyle: 'sass' // }), // AntDesignVueResolver(), // 图标解析器 IconsResolver({ // 自动引入的Icon组件统一前缀,默认为 i,设置false为不需要前缀 // prefix: 'icon', customCollections: ['custom'], }), ], }), Icons({ compiler: 'vue3', customCollections: { // 这里是存放svg图标的文件地址,custom是自定义图标库的名称 custom: FileSystemIconLoader('./src/assets/icons/svg/', (svg: string) => svg.replace(/^<svg /, '<svg fill="currentColor" ') ), }, }), ], // CSS 配置 css: { preprocessorOptions: { scss: { additionalData: `@import "@/styles/variables.scss";`, }, }, }, // 开发服务器配置 server: { port: 5173, open: true, }, // 构建配置 build: { rollupOptions: { /* input: { // 入口文件 main: path.resolve(__dirname, 'index.html'), login: path.resolve(__dirname, 'login.html'), }, */ output: { globals: { vue: 'Vue', lodash: '_', }, manualChunks: { // 手动分割路由库为公共块 router: ['vue-router'], vue: ['vue'], // 其他公共依赖 pinia: ['pinia'], lodash: ['lodash', 'lodash-es'], vueuse: ['@vueuse/core'], axios: ['axios'], tcsl: ['@tianyio/fast-util-lib'], }, // chunkFileNames: 'js/[name]-[hash].js', // 代码分割文件名 // entryFileNames: 'js/[name]-[hash].js', // 入口文件名 // assetFileNames: 'assets/[name]-[hash].[ext]', // 静态资源文件名 }, }, }, } return config })