run.ts 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. import { execaCommand, getPackages } from '@vben/node-utils';
  2. import { cancel, isCancel, select } from '@clack/prompts';
  3. interface RunOptions {
  4. command?: string;
  5. }
  6. export async function run(options: RunOptions) {
  7. const { command } = options;
  8. if (!command) {
  9. console.error('Please enter the command to run');
  10. process.exit(1);
  11. }
  12. const { packages } = await getPackages();
  13. // const appPkgs = await findApps(process.cwd(), packages);
  14. // const websitePkg = packages.find(
  15. // (item) => item.packageJson.name === '@vben/website',
  16. // );
  17. // 只显示有对应命令的包
  18. const selectPkgs = packages.filter((pkg) => {
  19. return (pkg?.packageJson as Record<string, any>)?.scripts?.[command];
  20. });
  21. let selectPkg: string | symbol;
  22. if (selectPkgs.length > 1) {
  23. selectPkg = await select<any, string>({
  24. message: `Select the app you need to run [${command}]:`,
  25. options: selectPkgs.map((item) => ({
  26. label: item?.packageJson.name,
  27. value: item?.packageJson.name,
  28. })),
  29. });
  30. if (isCancel(selectPkg) || !selectPkg) {
  31. cancel('👋 Has cancelled');
  32. process.exit(0);
  33. }
  34. } else {
  35. selectPkg = selectPkgs[0]?.packageJson?.name ?? '';
  36. }
  37. if (!selectPkg) {
  38. console.error('No app found');
  39. process.exit(1);
  40. }
  41. execaCommand(`pnpm --filter=${selectPkg} run ${command}`, {
  42. stdio: 'inherit',
  43. });
  44. }
  45. /**
  46. * 过滤app包
  47. * @param root
  48. * @param packages
  49. */
  50. // async function findApps(root: string, packages: Package[]) {
  51. // // apps内的
  52. // const appPackages = packages.filter((pkg) => {
  53. // const viteConfigExists = fs.existsSync(join(pkg.dir, 'vite.config.mts'));
  54. // return pkg.dir.startsWith(join(root, 'apps')) && viteConfigExists;
  55. // });
  56. // return appPackages;
  57. // }