run.ts 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  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. const selectPkg = await select<any, string>({
  22. message: `Select the app you need to run [${command}]:`,
  23. options: selectPkgs.map((item) => ({
  24. label: item?.packageJson.name,
  25. value: item?.packageJson.name,
  26. })),
  27. });
  28. if (isCancel(selectPkg) || !selectPkg) {
  29. cancel('👋 Has cancelled');
  30. process.exit(0);
  31. }
  32. execaCommand(`pnpm --filter=${selectPkg} run ${command}`, {
  33. stdio: 'inherit',
  34. });
  35. // const filters = [];
  36. // for (const app of selectApps) {
  37. // filters.push(`--filter=${app}`);
  38. // }
  39. // $.verbose = true;
  40. // execaCommand(`turbo run ${command} ${filters}`, {
  41. // stdio: 'inherit',
  42. // });
  43. }
  44. /**
  45. * 过滤app包
  46. * @param root
  47. * @param packages
  48. */
  49. // async function findApps(root: string, packages: Package[]) {
  50. // // apps内的
  51. // const appPackages = packages.filter((pkg) => {
  52. // const viteConfigExists = fs.existsSync(join(pkg.dir, 'vite.config.mts'));
  53. // return pkg.dir.startsWith(join(root, 'apps')) && viteConfigExists;
  54. // });
  55. // return appPackages;
  56. // }