run.ts 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  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. process.env.VITE_CJS_IGNORE_WARNING = '1';
  42. execaCommand(`pnpm --filter=${selectPkg} run ${command}`, {
  43. stdio: 'inherit',
  44. });
  45. }
  46. /**
  47. * 过滤app包
  48. * @param root
  49. * @param packages
  50. */
  51. // async function findApps(root: string, packages: Package[]) {
  52. // // apps内的
  53. // const appPackages = packages.filter((pkg) => {
  54. // const viteConfigExists = fs.existsSync(join(pkg.dir, 'vite.config.mts'));
  55. // return pkg.dir.startsWith(join(root, 'apps')) && viteConfigExists;
  56. // });
  57. // return appPackages;
  58. // }