Skip to content

Shared Config 快速开始

@uozi-admin/shared-config 是一个用于简化 UOZI Admin 项目配置的工具包,提供了开箱即用的 Vite 配置和常用插件配置。

特性

  • 🚀 零配置 - 开箱即用的 Vite 配置
  • 🔧 高度可定制 - 支持自定义配置覆盖
  • 📦 插件集成 - 内置常用 Vite 插件
  • 🎯 TypeScript - 完整的类型支持
  • 性能优化 - 内置构建优化配置
  • 🔄 热更新 - 优化的开发体验

安装

bash
npm install @uozi-admin/shared-config -D
bash
yarn add @uozi-admin/shared-config -D
bash
pnpm add @uozi-admin/shared-config -D

基础用法

vite.config.ts 中使用:

ts
import { createViteConfig } from '@uozi-admin/shared-config'

export default createViteConfig()

这将自动配置:

  • Vue 3 支持
  • TypeScript 支持
  • JSX/TSX 支持
  • API 自动导入
  • 组件自动导入
  • UnoCSS 支持
  • Vue DevTools 支持
  • 开发服务器代理配置
  • 常用构建优化

自定义配置

基础自定义

ts
import { createViteConfig } from '@uozi-admin/shared-config'

export default createViteConfig({
  // 自定义服务器配置
  server: {
    port: 3000,
    host: '0.0.0.0'
  },
  
  // 自定义构建配置
  build: {
    outDir: 'dist',
    sourcemap: true
  }
})

添加自定义插件

ts
import { createViteConfig } from '@uozi-admin/shared-config'
import { defineConfig } from 'vite'
import somePlugin from 'vite-plugin-something'

export default defineConfig((env) => {
  const config = createViteConfig({
    // 基础配置
  })(env)
  
  // 添加自定义插件
  config.plugins?.push(somePlugin())
  
  return config
})

环境变量配置

ts
import { createViteConfig } from '@uozi-admin/shared-config'

export default createViteConfig({
  // 定义环境变量
  define: {
    __APP_VERSION__: JSON.stringify(process.env.npm_package_version),
    __BUILD_TIME__: JSON.stringify(new Date().toISOString())
  }
})

代理配置

API 代理

ts
import { createViteConfig } from '@uozi-admin/shared-config'

export default createViteConfig({
  server: {
    proxy: {
      '/api': {
        target: 'http://localhost:8080',
        changeOrigin: true,
        rewrite: (path) => path.replace(/^\/api/, '')
      },
      '/upload': {
        target: 'http://localhost:9000',
        changeOrigin: true
      }
    }
  }
})

多环境代理

ts
import { createViteConfig } from '@uozi-admin/shared-config'

const getProxyConfig = (mode: string) => {
  const configs = {
    development: {
      '/api': {
        target: 'http://localhost:8080',
        changeOrigin: true
      }
    },
    staging: {
      '/api': {
        target: 'https://staging-api.example.com',
        changeOrigin: true
      }
    }
  }
  
  return configs[mode as keyof typeof configs] || {}
}

export default createViteConfig((env) => ({
  server: {
    proxy: getProxyConfig(env.mode)
  }
}))

构建优化

分包策略

ts
import { createViteConfig } from '@uozi-admin/shared-config'

export default createViteConfig({
  build: {
    rollupOptions: {
      output: {
        manualChunks: {
          // 将 Vue 相关库打包到一个 chunk
          vue: ['vue', 'vue-router', 'pinia'],
          // 将 Ant Design Vue 单独打包
          antd: ['ant-design-vue'],
          // 将工具库打包到一个 chunk
          utils: ['lodash-es', 'dayjs']
        }
      }
    }
  }
})

压缩配置

ts
import { createViteConfig } from '@uozi-admin/shared-config'

export default createViteConfig({
  build: {
    // 启用 gzip 压缩
    reportCompressedSize: true,
    // 设置 chunk 大小警告限制
    chunkSizeWarningLimit: 1000,
    // 压缩配置
    minify: 'terser',
    terserOptions: {
      compress: {
        drop_console: true,
        drop_debugger: true
      }
    }
  }
})

类型定义

环境变量类型

ts
// vite-env.d.ts
/// <reference types="vite/client" />

interface ImportMetaEnv {
  readonly VITE_APP_TITLE: string
  readonly VITE_API_BASE_URL: string
  readonly VITE_UPLOAD_URL: string
}

interface ImportMeta {
  readonly env: ImportMetaEnv
}

配置类型

ts
import type { UserConfig } from 'vite'
import { createViteConfig } from '@uozi-admin/shared-config'

const config: UserConfig = {
  // 配置项会有完整的类型提示
}

export default createViteConfig(config)

常见问题

如何禁用某个内置插件?

ts
import { createViteConfig } from '@uozi-admin/shared-config'

export default createViteConfig({
  // 通过插件配置禁用
  plugins: [
    // 自定义插件配置
  ]
})

如何修改自动导入配置?

ts
import { createViteConfig } from '@uozi-admin/shared-config'
import AutoImport from 'unplugin-auto-import/vite'

export default createViteConfig({
  plugins: [
    AutoImport({
      imports: [
        'vue',
        'vue-router',
        // 添加自定义导入
        {
          '@/utils': ['formatDate', 'formatCurrency']
        }
      ]
    })
  ]
})

下一步

根据 Apache-2.0 许可发布。