library.ts 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. import type { ConfigEnv, UserConfig } from 'vite';
  2. import type { DefineLibraryOptions } from '../typing';
  3. import { readPackageJSON } from '@vben/node-utils';
  4. import { defineConfig, mergeConfig } from 'vite';
  5. import { loadLibraryPlugins } from '../plugins';
  6. import { getCommonConfig } from './common';
  7. function defineLibraryConfig(userConfigPromise?: DefineLibraryOptions) {
  8. return defineConfig(async (config: ConfigEnv) => {
  9. const options = await userConfigPromise?.(config);
  10. const { command, mode } = config;
  11. const { library = {}, vite = {} } = options || {};
  12. const root = process.cwd();
  13. const isBuild = command === 'build';
  14. const plugins = await loadLibraryPlugins({
  15. dts: false,
  16. injectLibCss: true,
  17. injectMetadata: true,
  18. isBuild,
  19. mode,
  20. ...library,
  21. });
  22. const { dependencies = {}, peerDependencies = {} } =
  23. await readPackageJSON(root);
  24. const externalPackages = [
  25. ...Object.keys(dependencies),
  26. ...Object.keys(peerDependencies),
  27. ];
  28. const packageConfig: UserConfig = {
  29. build: {
  30. lib: {
  31. entry: 'src/index.ts',
  32. fileName: () => 'index.mjs',
  33. formats: ['es'],
  34. },
  35. rollupOptions: {
  36. external: (id) => {
  37. return externalPackages.some(
  38. (pkg) => id === pkg || id.startsWith(`${pkg}/`),
  39. );
  40. },
  41. },
  42. },
  43. plugins,
  44. };
  45. const commonConfig = await getCommonConfig();
  46. const mergedConmonConfig = mergeConfig(commonConfig, packageConfig);
  47. return mergeConfig(mergedConmonConfig, vite);
  48. });
  49. }
  50. export { defineLibraryConfig };