import { defineConfig } from 'vite' import vue from '@vitejs/plugin-vue' import AutoImport from 'unplugin-auto-import/vite' import setupExtend from 'unplugin-vue-setup-extend-plus/vite' import path from 'node:path' import { readFileSync } from 'node:fs' const packageJson = JSON.parse(readFileSync(new URL('./package.json', import.meta.url), 'utf8')) const externalDependencies = [ ...Object.keys(packageJson.dependencies || {}), ...Object.keys(packageJson.peerDependencies || {}) ] const peerDependencies = [ 'vue', 'vue-router', 'pinia', 'element-plus', '@element-plus/icons-vue' ] export default defineConfig({ plugins: [ vue(), AutoImport({ imports: [ 'vue', 'vue-router', 'pinia', { '@/utils/dict': ['useDict'], '@/utils/ruoyi': ['selectDictLabel'] } ], dts: false }), setupExtend() ], resolve: { alias: { '@': path.resolve(import.meta.dirname, './src') }, extensions: ['.mjs', '.js', '.ts', '.jsx', '.tsx', '.json', '.vue'] }, css: { preprocessorOptions: { scss: { additionalData: `@use "${path.resolve(import.meta.dirname, './src/style/variable.scss').replaceAll('\\', '/')}" as *;` } } }, build: { target: 'es2022', sourcemap: true, cssCodeSplit: false, lib: { entry: path.resolve(import.meta.dirname, 'src/index.js'), formats: ['es'], fileName: () => 'index.js', cssFileName: 'style' }, rollupOptions: { external: (id) => externalDependencies.some((dependency) => id === dependency || id.startsWith(`${dependency}/`)), output: { chunkFileNames: 'chunks/[name]-[hash].js', assetFileNames: (assetInfo) => assetInfo.name === 'style.css' ? 'style.css' : 'assets/[name]-[hash][extname]' } } } })