Skip to content

Commit 5a4c234

Browse files
authored
fix(dev): get dependencies bin path for any package manager (#6157)
1 parent 95313ce commit 5a4c234

File tree

10 files changed

+40
-27
lines changed

10 files changed

+40
-27
lines changed

packages/remix-dev/cli/commands.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ import type { RemixConfig } from "../config";
1717
import { readConfig } from "../config";
1818
import { formatRoutes, RoutesFormat, isRoutesFormat } from "../config/format";
1919
import { createApp } from "./create";
20-
import { getPreferredPackageManager } from "./getPreferredPackageManager";
20+
import { detectPackageManager } from "./detectPackageManager";
2121
import { setupRemix, isSetupPlatform, SetupPlatform } from "./setup";
2222
import runCodemod from "../codemod";
2323
import { CodemodError } from "../codemod/utils/error";
@@ -82,7 +82,7 @@ export async function init(
8282

8383
let initPackageJson = path.resolve(initScriptDir, "package.json");
8484
let isTypeScript = fse.existsSync(path.join(projectDir, "tsconfig.json"));
85-
let packageManager = getPreferredPackageManager();
85+
let packageManager = detectPackageManager() ?? "npm";
8686

8787
if (await fse.pathExists(initPackageJson)) {
8888
execSync(`${packageManager} install`, {

packages/remix-dev/cli/create.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import tar from "tar-fs";
1515
import * as colors from "../colors";
1616
import invariant from "../invariant";
1717
import packageJson from "../package.json";
18-
import { getPreferredPackageManager } from "./getPreferredPackageManager";
18+
import { detectPackageManager } from "./detectPackageManager";
1919
import * as useJavascript from "./useJavascript";
2020

2121
const remixDevPackageVersion = packageJson.version;
@@ -208,7 +208,7 @@ export async function createApp({
208208
}
209209

210210
if (installDeps) {
211-
let packageManager = getPreferredPackageManager();
211+
let packageManager = detectPackageManager() ?? "npm";
212212

213213
let npmConfig = execSync(
214214
`${packageManager} config get @remix-run:registry`,
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
type PackageManager = "npm" | "pnpm" | "yarn";
2+
3+
/**
4+
* Determine which package manager the user prefers.
5+
*
6+
* npm, pnpm and Yarn set the user agent environment variable
7+
* that can be used to determine which package manager ran
8+
* the command.
9+
*/
10+
export const detectPackageManager = (): PackageManager | undefined => {
11+
let { npm_config_user_agent } = process.env;
12+
if (!npm_config_user_agent) return undefined;
13+
try {
14+
let pkgManager = npm_config_user_agent.split("/")[0];
15+
if (pkgManager === "npm") return "npm";
16+
if (pkgManager === "pnpm") return "pnpm";
17+
if (pkgManager === "yarn") return "yarn";
18+
return undefined;
19+
} catch {
20+
return undefined;
21+
}
22+
};

packages/remix-dev/cli/getPreferredPackageManager.ts

Lines changed: 0 additions & 12 deletions
This file was deleted.

packages/remix-dev/cli/run.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import fse from "fs-extra";
88
import * as colors from "../colors";
99
import * as commands from "./commands";
1010
import { validateNewProjectPath, validateTemplate } from "./create";
11-
import { getPreferredPackageManager } from "./getPreferredPackageManager";
11+
import { detectPackageManager } from "./detectPackageManager";
1212

1313
const helpText = `
1414
${colors.logoBlue("R")} ${colors.logoGreen("E")} ${colors.logoYellow(
@@ -313,7 +313,7 @@ export async function run(argv: string[] = process.argv.slice(2)) {
313313
return;
314314
}
315315

316-
let packageManager = getPreferredPackageManager();
316+
let packageManager = detectPackageManager() ?? "npm";
317317
let answers = await inquirer
318318
.prompt<{
319319
appType: "template" | "stack";

packages/remix-dev/codemod/replace-remix-magic-imports/index.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import semver from "semver";
66

77
import { blue, cyan, gray } from "../../colors";
88
import { readConfig } from "../../config";
9-
import { getPreferredPackageManager } from "../../cli/getPreferredPackageManager";
9+
import { detectPackageManager } from "../../cli/detectPackageManager";
1010
import type { Codemod } from "../codemod";
1111
import { CodemodError } from "../utils/error";
1212
import * as log from "../utils/log";
@@ -177,7 +177,7 @@ const codemod: Codemod = async (projectDir, options) => {
177177
);
178178

179179
if (!options.dry) {
180-
let packageManager = getPreferredPackageManager();
180+
let packageManager = detectPackageManager() ?? "npm";
181181
log.info(
182182
`👉 To update your lockfile, run ${code(`${packageManager} install`)}`
183183
);

packages/remix-dev/compiler/js/compiler.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ import { vanillaExtractPlugin } from "../plugins/vanillaExtract";
2222
import invariant from "../../invariant";
2323
import { hmrPlugin } from "./plugins/hmr";
2424
import { createMatchPath } from "../utils/tsconfig";
25-
import { getPreferredPackageManager } from "../../cli/getPreferredPackageManager";
25+
import { detectPackageManager } from "../../cli/detectPackageManager";
2626
import type * as Channel from "../../channel";
2727
import type { Context } from "../context";
2828

@@ -145,7 +145,7 @@ const createEsbuildConfig = (
145145
}
146146

147147
let packageName = getNpmPackageName(args.path);
148-
let pkgManager = getPreferredPackageManager();
148+
let pkgManager = detectPackageManager() ?? "npm";
149149
if (
150150
ctx.options.onWarning &&
151151
!isNodeBuiltIn(packageName) &&

packages/remix-dev/compiler/server/plugins/bareImports.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import {
1010
} from "../virtualModules";
1111
import { isCssSideEffectImportPath } from "../../plugins/cssSideEffectImports";
1212
import { createMatchPath } from "../../utils/tsconfig";
13-
import { getPreferredPackageManager } from "../../../cli/getPreferredPackageManager";
13+
import { detectPackageManager } from "../../../cli/detectPackageManager";
1414
import type { Context } from "../../context";
1515

1616
/**
@@ -72,7 +72,7 @@ export function serverBareModulesPlugin({ config, options }: Context): Plugin {
7272
}
7373

7474
let packageName = getNpmPackageName(path);
75-
let pkgManager = getPreferredPackageManager();
75+
let pkgManager = detectPackageManager() ?? "npm";
7676

7777
// Warn if we can't find an import for a package.
7878
if (

packages/remix-dev/config.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import { ServerMode, isValidServerMode } from "./config/serverModes";
1313
import { writeConfigDefaults } from "./config/write-tsconfig-defaults";
1414
import { serverBuildVirtualModule } from "./compiler/server/virtualModules";
1515
import { flatRoutes } from "./config/flat-routes";
16-
import { getPreferredPackageManager } from "./cli/getPreferredPackageManager";
16+
import { detectPackageManager } from "./cli/detectPackageManager";
1717
import { warnOnce } from "./warnOnce";
1818

1919
export interface RemixMdxConfig {
@@ -599,7 +599,7 @@ export async function readConfig(
599599

600600
await pkgJson.save();
601601

602-
let packageManager = getPreferredPackageManager();
602+
let packageManager = detectPackageManager() ?? "npm";
603603

604604
execSync(`${packageManager} install`, {
605605
cwd: remixRoot,

packages/remix-dev/devServer_unstable/index.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import { loadEnv } from "./env";
1212
import * as Socket from "./socket";
1313
import * as HMR from "./hmr";
1414
import { warnOnce } from "../warnOnce";
15+
import { detectPackageManager } from "../cli/detectPackageManager";
1516

1617
export let serve = async (
1718
config: RemixConfig,
@@ -32,12 +33,14 @@ export let serve = async (
3233
prevManifest?: Manifest;
3334
} = {};
3435

36+
let pkgManager = detectPackageManager() ?? "npm";
37+
let bin = (await execa(pkgManager, ["bin"])).stdout.trim();
3538
let startAppServer = (command: string) => {
3639
return execa.command(command, {
3740
stdio: "inherit",
3841
env: {
3942
NODE_ENV: "development",
40-
PATH: `${process.cwd()}/node_modules/.bin:${process.env.PATH}`,
43+
PATH: `${bin}:${process.env.PATH}`,
4144
REMIX_DEV_HTTP_PORT: String(options.httpPort),
4245
},
4346
});

0 commit comments

Comments
 (0)