diff --git a/docs/generated/devkit/nx_devkit.md b/docs/generated/devkit/nx_devkit.md index 6cdf72ea11..2a7b74407b 100644 --- a/docs/generated/devkit/nx_devkit.md +++ b/docs/generated/devkit/nx_devkit.md @@ -1351,7 +1351,7 @@ Returns the list of outputs that will be cached. ### getPackageManagerCommand -▸ **getPackageManagerCommand**(`packageManager?`): `PackageManagerCommands` +▸ **getPackageManagerCommand**(`packageManager?`, `root?`): `PackageManagerCommands` Returns commands for the package manager used in the workspace. By default, the package manager is derived based on the lock file, @@ -1365,9 +1365,10 @@ execSync(`${getPackageManagerCommand().addDev} my-dev-package`); #### Parameters -| Name | Type | -| :--------------- | :------------------------------------------------------------------ | -| `packageManager` | [`PackageManager`](../../devkit/documents/nx_devkit#packagemanager) | +| Name | Type | Default value | Description | +| :--------------- | :------------------------------------------------------------------ | :-------------- | :------------------------------------------------------------------------------------------ | +| `packageManager` | [`PackageManager`](../../devkit/documents/nx_devkit#packagemanager) | `undefined` | The package manager to use. If not provided, it will be detected based on the lock file. | +| `root` | `string` | `workspaceRoot` | The directory the commands will be ran inside of. Defaults to the current workspace's root. | #### Returns diff --git a/docs/generated/packages/devkit/documents/nx_devkit.md b/docs/generated/packages/devkit/documents/nx_devkit.md index 6cdf72ea11..2a7b74407b 100644 --- a/docs/generated/packages/devkit/documents/nx_devkit.md +++ b/docs/generated/packages/devkit/documents/nx_devkit.md @@ -1351,7 +1351,7 @@ Returns the list of outputs that will be cached. ### getPackageManagerCommand -▸ **getPackageManagerCommand**(`packageManager?`): `PackageManagerCommands` +▸ **getPackageManagerCommand**(`packageManager?`, `root?`): `PackageManagerCommands` Returns commands for the package manager used in the workspace. By default, the package manager is derived based on the lock file, @@ -1365,9 +1365,10 @@ execSync(`${getPackageManagerCommand().addDev} my-dev-package`); #### Parameters -| Name | Type | -| :--------------- | :------------------------------------------------------------------ | -| `packageManager` | [`PackageManager`](../../devkit/documents/nx_devkit#packagemanager) | +| Name | Type | Default value | Description | +| :--------------- | :------------------------------------------------------------------ | :-------------- | :------------------------------------------------------------------------------------------ | +| `packageManager` | [`PackageManager`](../../devkit/documents/nx_devkit#packagemanager) | `undefined` | The package manager to use. If not provided, it will be detected based on the lock file. | +| `root` | `string` | `workspaceRoot` | The directory the commands will be ran inside of. Defaults to the current workspace's root. | #### Returns diff --git a/packages/nx/src/command-line/migrate/migrate.ts b/packages/nx/src/command-line/migrate/migrate.ts index 3bf055aff7..53837dc8bb 100644 --- a/packages/nx/src/command-line/migrate/migrate.ts +++ b/packages/nx/src/command-line/migrate/migrate.ts @@ -1028,7 +1028,7 @@ async function getPackageMigrationsUsingInstall( let result: ResolvedMigrationConfiguration; try { - const pmc = getPackageManagerCommand(detectPackageManager(dir)); + const pmc = getPackageManagerCommand(detectPackageManager(dir), dir); await execAsync(`${pmc.add} ${packageName}@${packageVersion}`, { cwd: dir, diff --git a/packages/nx/src/utils/package-manager.ts b/packages/nx/src/utils/package-manager.ts index ab23a024c9..a20ca693d6 100644 --- a/packages/nx/src/utils/package-manager.ts +++ b/packages/nx/src/utils/package-manager.ts @@ -50,9 +50,13 @@ export function detectPackageManager(dir: string = ''): PackageManager { * ```javascript * execSync(`${getPackageManagerCommand().addDev} my-dev-package`); * ``` + * + * @param packageManager The package manager to use. If not provided, it will be detected based on the lock file. + * @param root The directory the commands will be ran inside of. Defaults to the current workspace's root. */ export function getPackageManagerCommand( - packageManager: PackageManager = detectPackageManager() + packageManager: PackageManager = detectPackageManager(), + root: string = workspaceRoot ): PackageManagerCommands { const commands: { [pm in PackageManager]: () => PackageManagerCommands } = { yarn: () => { @@ -76,7 +80,7 @@ export function getPackageManagerCommand( const pnpmVersion = getPackageManagerVersion('pnpm'); const useExec = gte(pnpmVersion, '6.13.0'); const includeDoubleDashBeforeArgs = lt(pnpmVersion, '7.0.0'); - const isPnpmWorkspace = existsSync('pnpm-workspace.yaml'); + const isPnpmWorkspace = existsSync(join(root, 'pnpm-workspace.yaml')); return { install: 'pnpm install --no-frozen-lockfile', // explicitly disable in case of CI