From 7296e2dadb8ab67dab8cdb4c8d7a0c8a1dcf82c5 Mon Sep 17 00:00:00 2001 From: Christoph Knittel Date: Thu, 27 Nov 2025 14:28:15 +0100 Subject: [PATCH 1/2] Really fix pnpm this time --- src/PackageManagers.res | 17 ++++++++++++++++- src/RescriptVersions.res | 6 +++++- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/src/PackageManagers.res b/src/PackageManagers.res index 9dd5622..1f52457 100644 --- a/src/PackageManagers.res +++ b/src/PackageManagers.res @@ -17,8 +17,23 @@ let defaultPackagerInfo = {packageManager: Npm, command: "npm"} @scope(("process", "env")) external npm_execpath: option = "npm_execpath" +@scope(("process", "env")) +external npm_config_user_agent: option = "npm_config_user_agent" + +let isPnpmUserAgent = () => + switch npm_config_user_agent { + | Some(userAgent) => + userAgent + ->String.toLowerCase + ->String.split(" ") + ->Array.some(segment => segment->String.startsWith("pnpm/")) + | None => false + } + let getPackageManagerInfo = async () => + // Note: pnpm does not set npm_execpath switch npm_execpath { + | None if isPnpmUserAgent() => {packageManager: Pnpm, command: "pnpm"} | None => defaultPackagerInfo | Some(execPath) => // #58: Windows: packageManager may be something like @@ -41,7 +56,7 @@ let getPackageManagerInfo = async () => let isYarn1 = CompareVersions.compareVersions(version, "2.0.0")->Ordering.isLess Some(isYarn1 ? Yarn1 : YarnBerry) - | _ if filename->String.includes("pnpm") => Some(Pnpm) + | _ if filename->String.includes("pnpm") => Some(Pnpm) // in case pnpm sets npm_execpath in a future version | _ if filename->String.includes("npm") => Some(Npm) // make sure this goes after pnpm ... | _ if filename->String.includes("bun") => Some(Bun) | _ => None diff --git a/src/RescriptVersions.res b/src/RescriptVersions.res index 0f40e59..229598a 100644 --- a/src/RescriptVersions.res +++ b/src/RescriptVersions.res @@ -85,7 +85,11 @@ let installVersions = async ({rescriptVersion, rescriptCoreVersion}) => { switch packageManager { | YarnBerry => await ensureYarnNodeModulesLinker() - | Pnpm => await execCommand("import") // import versions from package-lock.json + | Pnpm => + let hasPackageLock = Path.join2(Process.cwd(), "package-lock.json")->Fs.existsSync + if hasPackageLock { + await execCommand("import") // import versions from package-lock.json + } | _ => () } From 5f00b1097a8ff5ff28a48b9dedd9fbd380bbb535 Mon Sep 17 00:00:00 2001 From: Christoph Knittel Date: Thu, 27 Nov 2025 14:32:10 +0100 Subject: [PATCH 2/2] Beta 3 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3142608..cc73051 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "create-rescript-app", - "version": "1.12.0-beta.2", + "version": "1.12.0-beta.3", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "create-rescript-app", - "version": "1.12.0-beta.2", + "version": "1.12.0-beta.3", "license": "ISC", "bin": { "create-rescript-app": "out/create-rescript-app.cjs" diff --git a/package.json b/package.json index 4c755db..6dfd9b8 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "create-rescript-app", - "version": "1.12.0-beta.2", + "version": "1.12.0-beta.3", "description": "Quickly create new ReScript apps from project templates.", "main": "out/create-rescript-app.cjs", "scripts": {