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:
22
packages/create/src/install.ts
Normal file
22
packages/create/src/install.ts
Normal 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"
|
||||
);
|
||||
}
|
||||
}
|
||||
35
packages/create/src/package-manager.ts
Normal file
35
packages/create/src/package-manager.ts
Normal 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 ${_}`);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user