monorepo.ts 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  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(
  13. ['pnpm-lock.yaml', 'yarn.lock', 'package-lock.json'],
  14. {
  15. cwd,
  16. type: 'file',
  17. },
  18. );
  19. return dirname(lockFile || '');
  20. }
  21. /**
  22. * 获取大仓的所有包
  23. */
  24. function getPackagesSync() {
  25. const root = findMonorepoRoot();
  26. return getPackagesSyncFunc(root);
  27. }
  28. /**
  29. * 获取大仓的所有包
  30. */
  31. async function getPackages() {
  32. const root = findMonorepoRoot();
  33. return await getPackagesFunc(root);
  34. }
  35. /**
  36. * 获取大仓指定的包
  37. */
  38. async function getPackage(pkgName: string) {
  39. const { packages } = await getPackages();
  40. return packages.find((pkg) => pkg.packageJson.name === pkgName);
  41. }
  42. export { findMonorepoRoot, getPackage, getPackages, getPackagesSync };