monorepo.ts 970 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. import { dirname } from 'node:path';
  2. import {
  3. getPackages as getPackagesFunc,
  4. getPackagesSync as getPackagesSyncFunc,
  5. } from '@manypkg/get-packages';
  6. import { findUpSync } from 'find-up';
  7. /**
  8. * 查找大仓的根目录
  9. * @param cwd
  10. */
  11. function findMonorepoRoot(cwd: string = process.cwd()) {
  12. const lockFile = findUpSync('pnpm-lock.yaml', {
  13. cwd,
  14. type: 'file',
  15. });
  16. return dirname(lockFile || '');
  17. }
  18. /**
  19. * 获取大仓的所有包
  20. */
  21. function getPackagesSync() {
  22. const root = findMonorepoRoot();
  23. return getPackagesSyncFunc(root);
  24. }
  25. /**
  26. * 获取大仓的所有包
  27. */
  28. async function getPackages() {
  29. const root = findMonorepoRoot();
  30. return await getPackagesFunc(root);
  31. }
  32. /**
  33. * 获取大仓指定的包
  34. */
  35. async function getPackage(pkgName: string) {
  36. const { packages } = await getPackages();
  37. return packages.find((pkg) => pkg.packageJson.name === pkgName);
  38. }
  39. export { findMonorepoRoot, getPackage, getPackages, getPackagesSync };