import { readPackageJSON } from 'pkg-types'; import { defineConfig, mergeConfig, type UserConfig } from 'vite'; import cssInjectedByJsPlugin from 'vite-plugin-css-injected-by-js'; import dts from 'vite-plugin-dts'; import { configSvgIconsPlugin } from '../plugins/svgSprite'; import { commonConfig } from './common'; interface DefineOptions { overrides?: UserConfig; options?: { /** * 构建分离css * @default false */ extraCss: boolean; }; } function definePackageConfig(defineOptions: DefineOptions = {}) { const { overrides = {}, options } = defineOptions; const root = process.cwd(); const { extraCss } = options ?? {}; return defineConfig(async ({ mode, command }) => { const { dependencies = {}, peerDependencies = {} } = await readPackageJSON(root); const isBuild = command === 'build'; const packageConfig: UserConfig = { esbuild: { drop: mode === 'production' ? ['console', 'debugger'] : [], }, build: { lib: { entry: 'src/index.ts', formats: ['es'], fileName: () => 'index.mjs', }, rollupOptions: { external: [...Object.keys(dependencies), ...Object.keys(peerDependencies)], }, }, plugins: [ dts({ // logLevel: 'warn', noEmitOnError: true, skipDiagnostics: true, }), !extraCss && cssInjectedByJsPlugin(), configSvgIconsPlugin({ isBuild }), ], }; const mergedConfig = mergeConfig(commonConfig, packageConfig); return mergeConfig(mergedConfig, overrides); }); } export { definePackageConfig };