1
0
mirror of https://github.com/zuiidea/antd-admin synced 2026-09-24 01:55:12 +00:00

feat(create): detect package managers and run install

Made-with: Cursor
This commit is contained in:
zuiidea
2026-04-14 22:32:59 +08:00
parent db696409d3
commit 3e630785bb
2 changed files with 57 additions and 0 deletions

View File

@@ -0,0 +1,22 @@
import { spawnSync } from "node:child_process";
import type { PackageManagerName } from "./package-manager.js";
import { spawnInstall } from "./package-manager.js";
import { CliError } from "./errors.js";
export function installDependencies(
cwd: string,
manager: PackageManagerName
): void {
const { cmd, args } = spawnInstall(manager);
const res = spawnSync(cmd, args, {
cwd,
stdio: "inherit",
env: { ...process.env, CI: "1" },
});
if (res.error || res.status !== 0) {
throw new CliError(
`${cmd} ${args.join(" ")} failed in ${cwd}`,
"INSTALL_FAILED"
);
}
}

View File

@@ -0,0 +1,35 @@
import { spawnSync } from "node:child_process";
export type PackageManagerName = "npm" | "pnpm" | "yarn" | "bun";
const ORDER: PackageManagerName[] = ["pnpm", "npm", "yarn", "bun"];
export function isManagerAvailable(name: PackageManagerName): boolean {
const result = spawnSync(name, ["--version"], { stdio: "ignore" });
return result.status === 0;
}
export function detectAvailableManagers(): PackageManagerName[] {
return ORDER.filter(isManagerAvailable);
}
/** Install argv; cwd is applied by install.ts via spawnSync `cwd` option. */
export function spawnInstall(name: PackageManagerName): {
cmd: string;
args: string[];
} {
switch (name) {
case "pnpm":
return { cmd: "pnpm", args: ["install"] };
case "npm":
return { cmd: "npm", args: ["install"] };
case "yarn":
return { cmd: "yarn", args: ["install"] };
case "bun":
return { cmd: "bun", args: ["install"] };
default: {
const _: never = name;
throw new Error(`unsupported manager ${_}`);
}
}
}