diff --git a/.changeset/cyan-houses-dress.md b/.changeset/cyan-houses-dress.md new file mode 100644 index 0000000000..e457c6edd9 --- /dev/null +++ b/.changeset/cyan-houses-dress.md @@ -0,0 +1,5 @@ +--- +"shadcn-ui": patch +--- + +fix(cli): use `@antfu/ni` to detect package manager diff --git a/packages/cli/package.json b/packages/cli/package.json index e4c34787d9..329c5c5fe9 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -44,6 +44,7 @@ "test": "vitest run" }, "dependencies": { + "@antfu/ni": "^0.21.4", "chalk": "5.2.0", "commander": "^10.0.0", "cosmiconfig": "^8.1.3", diff --git a/packages/cli/src/utils/get-package-manager.ts b/packages/cli/src/utils/get-package-manager.ts index 8f60e255b8..f28d30b5b4 100644 --- a/packages/cli/src/utils/get-package-manager.ts +++ b/packages/cli/src/utils/get-package-manager.ts @@ -1,50 +1,13 @@ -import { promises as fs } from "fs" -import path from "path" - -async function fileExists(path: string) { - try { - await fs.access(path) - return true - } catch { - return false - } -} +import { detect } from "@antfu/ni" export async function getPackageManager( targetDir: string ): Promise<"yarn" | "pnpm" | "npm"> { - const [yarnLock, npmLock, pnpmLock] = await Promise.all([ - fileExists(path.resolve(targetDir, "yarn.lock")), - fileExists(path.resolve(targetDir, "package-lock.json")), - fileExists(path.resolve(targetDir, "pnpm-lock.yaml")), - ]) - - if (yarnLock) { - return "yarn" - } - - if (pnpmLock) { - return "pnpm" - } - - if (npmLock) { - return "npm" - } - - // Match based on used package manager - const userAgent = process.env.npm_config_user_agent - - if (!userAgent) { - return "npm" - } - - if (userAgent.startsWith("yarn")) { - return "yarn" - } + const packageManager = await detect({ programmatic: true, cwd: targetDir }) - if (userAgent.startsWith("pnpm")) { - return "pnpm" - } + if (packageManager === "yarn@berry") return "yarn" + if (packageManager === "pnpm@6") return "pnpm" + if (packageManager === "bun") return "npm" - return "npm" + return packageManager ?? "npm" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e76f4fdd8c..745eb1e7f0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,4 +1,4 @@ -lockfileVersion: '6.1' +lockfileVersion: '6.0' settings: autoInstallPeers: true @@ -336,6 +336,9 @@ importers: packages/cli: dependencies: + '@antfu/ni': + specifier: ^0.21.4 + version: 0.21.4 chalk: specifier: 5.2.0 version: 5.2.0 @@ -493,6 +496,11 @@ packages: '@jridgewell/gen-mapping': 0.3.3 '@jridgewell/trace-mapping': 0.3.18 + /@antfu/ni@0.21.4: + resolution: {integrity: sha512-O0Uv9LbLDSoEg26fnMDdDRiPwFJnQSoD4WnrflDwKCJm8Cx/0mV4cGxwBLXan5mGIrpK4Dd7vizf4rQm0QCEAA==} + hasBin: true + dev: false + /@babel/code-frame@7.21.4: resolution: {integrity: sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==} engines: {node: '>=6.9.0'}