Some checks failed
Deploy Website on push / Deploy Push Element Ftp (push) Waiting to run
Lock Threads / action (push) Has been cancelled
Issue Close Require / close-issues (push) Has been cancelled
Close stale issues / stale (push) Has been cancelled
CI / Test (ubuntu-latest) (push) Has been cancelled
CI / Test (windows-latest) (push) Has been cancelled
CI / Lint (ubuntu-latest) (push) Has been cancelled
CI / Lint (windows-latest) (push) Has been cancelled
CI / Check (ubuntu-latest) (push) Has been cancelled
CI / Check (windows-latest) (push) Has been cancelled
CI / CI OK (push) Has been cancelled
CodeQL / Analyze (javascript-typescript) (push) Has been cancelled
Deploy Website on push / Deploy Push Playground Ftp (push) Has been cancelled
Deploy Website on push / Deploy Push Docs Ftp (push) Has been cancelled
Deploy Website on push / Deploy Push Antd Ftp (push) Has been cancelled
Deploy Website on push / Deploy Push Naive Ftp (push) Has been cancelled
Deploy Website on push / Rerun on failure (push) Has been cancelled
Release Drafter / update_release_draft (push) Has been cancelled
68 lines
1.7 KiB
TypeScript
68 lines
1.7 KiB
TypeScript
import { execaCommand, getPackages } from '@vben/node-utils';
|
|
|
|
import { cancel, isCancel, select } from '@clack/prompts';
|
|
|
|
interface RunOptions {
|
|
command?: string;
|
|
}
|
|
|
|
export async function run(options: RunOptions) {
|
|
const { command } = options;
|
|
if (!command) {
|
|
console.error('Please enter the command to run');
|
|
process.exit(1);
|
|
}
|
|
const { packages } = await getPackages();
|
|
// const appPkgs = await findApps(process.cwd(), packages);
|
|
// const websitePkg = packages.find(
|
|
// (item) => item.packageJson.name === '@vben/website',
|
|
// );
|
|
|
|
// 只显示有对应命令的包
|
|
const selectPkgs = packages.filter((pkg) => {
|
|
return (pkg?.packageJson as Record<string, any>)?.scripts?.[command];
|
|
});
|
|
|
|
let selectPkg: string | symbol;
|
|
if (selectPkgs.length > 1) {
|
|
selectPkg = await select<any, string>({
|
|
message: `Select the app you need to run [${command}]:`,
|
|
options: selectPkgs.map((item) => ({
|
|
label: item?.packageJson.name,
|
|
value: item?.packageJson.name,
|
|
})),
|
|
});
|
|
|
|
if (isCancel(selectPkg) || !selectPkg) {
|
|
cancel('👋 Has cancelled');
|
|
process.exit(0);
|
|
}
|
|
} else {
|
|
selectPkg = selectPkgs[0]?.packageJson?.name ?? '';
|
|
}
|
|
|
|
if (!selectPkg) {
|
|
console.error('No app found');
|
|
process.exit(1);
|
|
}
|
|
|
|
execaCommand(`pnpm --filter=${selectPkg} run ${command}`, {
|
|
stdio: 'inherit',
|
|
});
|
|
}
|
|
|
|
/**
|
|
* 过滤app包
|
|
* @param root
|
|
* @param packages
|
|
*/
|
|
// async function findApps(root: string, packages: Package[]) {
|
|
// // apps内的
|
|
// const appPackages = packages.filter((pkg) => {
|
|
// const viteConfigExists = fs.existsSync(join(pkg.dir, 'vite.config.mts'));
|
|
// return pkg.dir.startsWith(join(root, 'apps')) && viteConfigExists;
|
|
// });
|
|
|
|
// return appPackages;
|
|
// }
|