From 5e6cf9646bfb55dd208dd130f3e30b90c05cdaab Mon Sep 17 00:00:00 2001 From: Phillip Barta Date: Thu, 17 Jun 2021 11:43:16 +0200 Subject: [PATCH] feat(devkit): reexport package manager methods in devkit --- docs/angular/api-nx-devkit/index.md | 48 ++++++++--- docs/node/api-nx-devkit/index.md | 48 ++++++++--- docs/react/api-nx-devkit/index.md | 48 ++++++++--- packages/devkit/index.ts | 6 +- packages/tao/src/commands/migrate.ts | 21 ++--- packages/tao/src/commands/ngcli-adapter.ts | 2 +- packages/tao/src/shared/package-manager.ts | 82 ++++++++++--------- .../src/command-line/connect-to-nx-cloud.ts | 2 +- .../workspace/src/command-line/nx-commands.ts | 26 +++--- packages/workspace/src/command-line/report.ts | 10 ++- .../src/command-line/workspace-generators.ts | 19 ++--- .../executors/run-script/run-script.impl.ts | 4 +- .../utilities/plugins/plugin-capabilities.ts | 3 +- 13 files changed, 200 insertions(+), 119 deletions(-) diff --git a/docs/angular/api-nx-devkit/index.md b/docs/angular/api-nx-devkit/index.md index 4b5887a2d5..1a1a4aa42f 100644 --- a/docs/angular/api-nx-devkit/index.md +++ b/docs/angular/api-nx-devkit/index.md @@ -60,9 +60,11 @@ - [applyChangesToString](../../angular/nx-devkit/index#applychangestostring) - [convertNxExecutor](../../angular/nx-devkit/index#convertnxexecutor) - [convertNxGenerator](../../angular/nx-devkit/index#convertnxgenerator) +- [detectPackageManager](../../angular/nx-devkit/index#detectpackagemanager) - [formatFiles](../../angular/nx-devkit/index#formatfiles) - [generateFiles](../../angular/nx-devkit/index#generatefiles) - [getPackageManagerCommand](../../angular/nx-devkit/index#getpackagemanagercommand) +- [getPackageManagerVersion](../../angular/nx-devkit/index#getpackagemanagerversion) - [getProjects](../../angular/nx-devkit/index#getprojects) - [getWorkspaceLayout](../../angular/nx-devkit/index#getworkspacelayout) - [getWorkspacePath](../../angular/nx-devkit/index#getworkspacepath) @@ -578,6 +580,22 @@ Convert an Nx Generator into an Angular Devkit Schematic --- +### detectPackageManager + +▸ **detectPackageManager**(`dir?`: _string_): [_PackageManager_](../../angular/nx-devkit/index#packagemanager) + +Detects which package manager is used in the workspace based on the lock file. + +#### Parameters + +| Name | Type | Default value | +| :---- | :------- | :------------ | +| `dir` | _string_ | '' | + +**Returns:** [_PackageManager_](../../angular/nx-devkit/index#packagemanager) + +--- + ### formatFiles ▸ **formatFiles**(`host`: [_Tree_](../../angular/nx-devkit/index#tree)): _Promise_ @@ -635,7 +653,7 @@ doesn't get confused about incorrect TypeScript files. ### getPackageManagerCommand -▸ **getPackageManagerCommand**(`packageManager?`: [_PackageManager_](../../angular/nx-devkit/index#packagemanager)): _object_ +▸ **getPackageManagerCommand**(`packageManager?`: [_PackageManager_](../../angular/nx-devkit/index#packagemanager)): PackageManagerCommands Returns commands for the package manager used in the workspace. By default, the package manager is derived based on the lock file, @@ -653,17 +671,25 @@ execSync(`${getPackageManagerCommand().addDev} my-dev-package`); | :--------------- | :--------------------------------------------------------------- | | `packageManager` | [_PackageManager_](../../angular/nx-devkit/index#packagemanager) | -**Returns:** _object_ +**Returns:** PackageManagerCommands -| Name | Type | -| :-------- | :------------------------------------------------- | -| `add` | _string_ | -| `addDev` | _string_ | -| `exec` | _string_ | -| `install` | _string_ | -| `list` | _string_ | -| `rm` | _string_ | -| `run` | (`script`: _string_, `args`: _string_) => _string_ | +--- + +### getPackageManagerVersion + +▸ **getPackageManagerVersion**(`packageManager?`: [_PackageManager_](../../angular/nx-devkit/index#packagemanager)): _string_ + +Returns the version of the package manager used in the workspace. +By default, the package manager is derived based on the lock file, +but it can also be passed in explicitly. + +#### Parameters + +| Name | Type | +| :--------------- | :--------------------------------------------------------------- | +| `packageManager` | [_PackageManager_](../../angular/nx-devkit/index#packagemanager) | + +**Returns:** _string_ --- diff --git a/docs/node/api-nx-devkit/index.md b/docs/node/api-nx-devkit/index.md index 1b7a26f97f..09e6eabb94 100644 --- a/docs/node/api-nx-devkit/index.md +++ b/docs/node/api-nx-devkit/index.md @@ -60,9 +60,11 @@ - [applyChangesToString](../../node/nx-devkit/index#applychangestostring) - [convertNxExecutor](../../node/nx-devkit/index#convertnxexecutor) - [convertNxGenerator](../../node/nx-devkit/index#convertnxgenerator) +- [detectPackageManager](../../node/nx-devkit/index#detectpackagemanager) - [formatFiles](../../node/nx-devkit/index#formatfiles) - [generateFiles](../../node/nx-devkit/index#generatefiles) - [getPackageManagerCommand](../../node/nx-devkit/index#getpackagemanagercommand) +- [getPackageManagerVersion](../../node/nx-devkit/index#getpackagemanagerversion) - [getProjects](../../node/nx-devkit/index#getprojects) - [getWorkspaceLayout](../../node/nx-devkit/index#getworkspacelayout) - [getWorkspacePath](../../node/nx-devkit/index#getworkspacepath) @@ -578,6 +580,22 @@ Convert an Nx Generator into an Angular Devkit Schematic --- +### detectPackageManager + +▸ **detectPackageManager**(`dir?`: _string_): [_PackageManager_](../../node/nx-devkit/index#packagemanager) + +Detects which package manager is used in the workspace based on the lock file. + +#### Parameters + +| Name | Type | Default value | +| :---- | :------- | :------------ | +| `dir` | _string_ | '' | + +**Returns:** [_PackageManager_](../../node/nx-devkit/index#packagemanager) + +--- + ### formatFiles ▸ **formatFiles**(`host`: [_Tree_](../../node/nx-devkit/index#tree)): _Promise_ @@ -635,7 +653,7 @@ doesn't get confused about incorrect TypeScript files. ### getPackageManagerCommand -▸ **getPackageManagerCommand**(`packageManager?`: [_PackageManager_](../../node/nx-devkit/index#packagemanager)): _object_ +▸ **getPackageManagerCommand**(`packageManager?`: [_PackageManager_](../../node/nx-devkit/index#packagemanager)): PackageManagerCommands Returns commands for the package manager used in the workspace. By default, the package manager is derived based on the lock file, @@ -653,17 +671,25 @@ execSync(`${getPackageManagerCommand().addDev} my-dev-package`); | :--------------- | :------------------------------------------------------------ | | `packageManager` | [_PackageManager_](../../node/nx-devkit/index#packagemanager) | -**Returns:** _object_ +**Returns:** PackageManagerCommands -| Name | Type | -| :-------- | :------------------------------------------------- | -| `add` | _string_ | -| `addDev` | _string_ | -| `exec` | _string_ | -| `install` | _string_ | -| `list` | _string_ | -| `rm` | _string_ | -| `run` | (`script`: _string_, `args`: _string_) => _string_ | +--- + +### getPackageManagerVersion + +▸ **getPackageManagerVersion**(`packageManager?`: [_PackageManager_](../../node/nx-devkit/index#packagemanager)): _string_ + +Returns the version of the package manager used in the workspace. +By default, the package manager is derived based on the lock file, +but it can also be passed in explicitly. + +#### Parameters + +| Name | Type | +| :--------------- | :------------------------------------------------------------ | +| `packageManager` | [_PackageManager_](../../node/nx-devkit/index#packagemanager) | + +**Returns:** _string_ --- diff --git a/docs/react/api-nx-devkit/index.md b/docs/react/api-nx-devkit/index.md index 98381ea69f..3f233d4342 100644 --- a/docs/react/api-nx-devkit/index.md +++ b/docs/react/api-nx-devkit/index.md @@ -60,9 +60,11 @@ - [applyChangesToString](../../react/nx-devkit/index#applychangestostring) - [convertNxExecutor](../../react/nx-devkit/index#convertnxexecutor) - [convertNxGenerator](../../react/nx-devkit/index#convertnxgenerator) +- [detectPackageManager](../../react/nx-devkit/index#detectpackagemanager) - [formatFiles](../../react/nx-devkit/index#formatfiles) - [generateFiles](../../react/nx-devkit/index#generatefiles) - [getPackageManagerCommand](../../react/nx-devkit/index#getpackagemanagercommand) +- [getPackageManagerVersion](../../react/nx-devkit/index#getpackagemanagerversion) - [getProjects](../../react/nx-devkit/index#getprojects) - [getWorkspaceLayout](../../react/nx-devkit/index#getworkspacelayout) - [getWorkspacePath](../../react/nx-devkit/index#getworkspacepath) @@ -578,6 +580,22 @@ Convert an Nx Generator into an Angular Devkit Schematic --- +### detectPackageManager + +▸ **detectPackageManager**(`dir?`: _string_): [_PackageManager_](../../react/nx-devkit/index#packagemanager) + +Detects which package manager is used in the workspace based on the lock file. + +#### Parameters + +| Name | Type | Default value | +| :---- | :------- | :------------ | +| `dir` | _string_ | '' | + +**Returns:** [_PackageManager_](../../react/nx-devkit/index#packagemanager) + +--- + ### formatFiles ▸ **formatFiles**(`host`: [_Tree_](../../react/nx-devkit/index#tree)): _Promise_ @@ -635,7 +653,7 @@ doesn't get confused about incorrect TypeScript files. ### getPackageManagerCommand -▸ **getPackageManagerCommand**(`packageManager?`: [_PackageManager_](../../react/nx-devkit/index#packagemanager)): _object_ +▸ **getPackageManagerCommand**(`packageManager?`: [_PackageManager_](../../react/nx-devkit/index#packagemanager)): PackageManagerCommands Returns commands for the package manager used in the workspace. By default, the package manager is derived based on the lock file, @@ -653,17 +671,25 @@ execSync(`${getPackageManagerCommand().addDev} my-dev-package`); | :--------------- | :------------------------------------------------------------- | | `packageManager` | [_PackageManager_](../../react/nx-devkit/index#packagemanager) | -**Returns:** _object_ +**Returns:** PackageManagerCommands -| Name | Type | -| :-------- | :------------------------------------------------- | -| `add` | _string_ | -| `addDev` | _string_ | -| `exec` | _string_ | -| `install` | _string_ | -| `list` | _string_ | -| `rm` | _string_ | -| `run` | (`script`: _string_, `args`: _string_) => _string_ | +--- + +### getPackageManagerVersion + +▸ **getPackageManagerVersion**(`packageManager?`: [_PackageManager_](../../react/nx-devkit/index#packagemanager)): _string_ + +Returns the version of the package manager used in the workspace. +By default, the package manager is derived based on the lock file, +but it can also be passed in explicitly. + +#### Parameters + +| Name | Type | +| :--------------- | :------------------------------------------------------------- | +| `packageManager` | [_PackageManager_](../../react/nx-devkit/index#packagemanager) | + +**Returns:** _string_ --- diff --git a/packages/devkit/index.ts b/packages/devkit/index.ts index 443821eac8..e61af6ecde 100644 --- a/packages/devkit/index.ts +++ b/packages/devkit/index.ts @@ -20,7 +20,11 @@ export type { } from '@nrwl/tao/src/shared/nx'; export { logger } from '@nrwl/tao/src/shared/logger'; export type { PackageManager } from '@nrwl/tao/src/shared/package-manager'; -export { getPackageManagerCommand } from '@nrwl/tao/src/shared/package-manager'; +export { + getPackageManagerCommand, + detectPackageManager, + getPackageManagerVersion, +} from '@nrwl/tao/src/shared/package-manager'; export type { Target } from '@nrwl/tao/src/commands/run'; export { runExecutor } from '@nrwl/tao/src/commands/run'; diff --git a/packages/tao/src/commands/migrate.ts b/packages/tao/src/commands/migrate.ts index cdf259a5a1..0af47c8730 100644 --- a/packages/tao/src/commands/migrate.ts +++ b/packages/tao/src/commands/migrate.ts @@ -6,11 +6,7 @@ import { gt, lte } from 'semver'; import { dirSync } from 'tmp'; import { logger } from '../shared/logger'; import { convertToCamelCase, handleErrors } from '../shared/params'; -import { - detectPackageManager, - getPackageManagerCommand, - PackageManager, -} from '../shared/package-manager'; +import { getPackageManagerCommand } from '../shared/package-manager'; import { FsTree } from '../shared/tree'; import { flushChanges } from './generate'; import { @@ -424,7 +420,7 @@ function versions(root: string, from: { [p: string]: string }) { } // testing-fetch-start -function createFetcher(packageManager: PackageManager) { +function createFetcher() { const cache = {}; return async function f( packageName: string, @@ -433,7 +429,7 @@ function createFetcher(packageManager: PackageManager) { if (!cache[`${packageName}-${packageVersion}`]) { const dir = dirSync().name; logger.info(`Fetching ${packageName}@${packageVersion}`); - const pmc = getPackageManagerCommand(packageManager); + const pmc = getPackageManagerCommand(); execSync(`${pmc.add} ${packageName}@${packageVersion}`, { stdio: [], cwd: dir, @@ -539,14 +535,13 @@ async function generateMigrationsJsonAndUpdatePackageJson( to: { [p: string]: string }; } ) { - const packageManager = detectPackageManager(); - const pmc = getPackageManagerCommand(packageManager); + const pmc = getPackageManagerCommand(); try { logger.info(`Fetching meta data about packages.`); logger.info(`It may take a few minutes.`); const migrator = new Migrator({ versions: versions(root, opts.from), - fetch: createFetcher(packageManager), + fetch: createFetcher(), from: opts.from, to: opts.to, }); @@ -611,7 +606,7 @@ function installAngularDevkitIfNecessaryToExecuteLegacyMigrations( ); if (!hasAngularDevkitMigrations) return false; - const pmCommands = getPackageManagerCommand(detectPackageManager()); + const pmCommands = getPackageManagerCommand(); const devkitInstalled = execSync(`${pmCommands.list} @angular-devkit/schematics`) .toString() @@ -630,13 +625,13 @@ function installAngularDevkitIfNecessaryToExecuteLegacyMigrations( } function removeAngularDevkitMigrations() { - const pmCommands = getPackageManagerCommand(detectPackageManager()); + const pmCommands = getPackageManagerCommand(); execSync(`${pmCommands.rm} @angular-devkit/schematics`); execSync(`${pmCommands.rm} @angular-devkit/core`); } function runInstall() { - const pmCommands = getPackageManagerCommand(detectPackageManager()); + const pmCommands = getPackageManagerCommand(); logger.info( `NX Running '${pmCommands.install}' to make sure necessary packages are installed` ); diff --git a/packages/tao/src/commands/ngcli-adapter.ts b/packages/tao/src/commands/ngcli-adapter.ts index 2b8c046300..dbbfd15995 100644 --- a/packages/tao/src/commands/ngcli-adapter.ts +++ b/packages/tao/src/commands/ngcli-adapter.ts @@ -22,7 +22,7 @@ import { toNewFormatOrNull, toOldFormatOrNull, workspaceConfigName, -} from '@nrwl/tao/src/shared/workspace'; +} from '../shared/workspace'; import { dirname, extname, resolve, join } from 'path'; import { FileBuffer } from '@angular-devkit/core/src/virtual-fs/host/interface'; import { EMPTY, Observable, of, concat } from 'rxjs'; diff --git a/packages/tao/src/shared/package-manager.ts b/packages/tao/src/shared/package-manager.ts index 5f4764ea4f..5892d259d8 100644 --- a/packages/tao/src/shared/package-manager.ts +++ b/packages/tao/src/shared/package-manager.ts @@ -4,6 +4,19 @@ import { join } from 'path'; export type PackageManager = 'yarn' | 'pnpm' | 'npm'; +export interface PackageManagerCommands { + install: string; + add: string; + addDev: string; + rm: string; + exec: string; + list: string; + run: (script: string, args: string) => string; +} + +/** + * Detects which package manager is used in the workspace based on the lock file. + */ export function detectPackageManager(dir: string = ''): PackageManager { return existsSync(join(dir, 'yarn.lock')) ? 'yarn' @@ -22,45 +35,32 @@ export function detectPackageManager(dir: string = ''): PackageManager { * ```javascript * execSync(`${getPackageManagerCommand().addDev} my-dev-package`); * ``` - * */ export function getPackageManagerCommand( packageManager: PackageManager = detectPackageManager() -): { - install: string; - add: string; - addDev: string; - rm: string; - exec: string; - list: string; - run: (script: string, args: string) => string; -} { - switch (packageManager) { - case 'yarn': - return { - install: 'yarn', - add: 'yarn add', - addDev: 'yarn add -D', - rm: 'yarn remove', - exec: 'yarn', - run: (script: string, args: string) => `yarn ${script} ${args}`, - list: 'yarn list', - }; +): PackageManagerCommands { + const commands: { [pm in PackageManager]: () => PackageManagerCommands } = { + yarn: () => ({ + install: 'yarn', + add: 'yarn add', + addDev: 'yarn add -D', + rm: 'yarn remove', + exec: 'yarn', + run: (script: string, args: string) => `yarn ${script} ${args}`, + list: 'yarn list', + }), + pnpm: () => ({ + install: 'pnpm install --no-frozen-lockfile', // explicitly disable in case of CI + add: 'pnpm add', + addDev: 'pnpm add -D', + rm: 'pnpm rm', + exec: 'pnpx', + run: (script: string, args: string) => `pnpm run ${script} -- ${args}`, + list: 'pnpm ls --depth 100', + }), + npm: () => { + process.env.npm_config_legacy_peer_deps ??= 'true'; - case 'pnpm': - return { - install: 'pnpm install --no-frozen-lockfile', // explicitly disable in case of CI - add: 'pnpm add', - addDev: 'pnpm add -D', - rm: 'pnpm rm', - exec: 'pnpx', - run: (script: string, args: string) => `pnpm run ${script} -- ${args}`, - list: 'pnpm ls --depth 100', - }; - - case 'npm': - process.env.npm_config_legacy_peer_deps = - process.env.npm_config_legacy_peer_deps ?? 'true'; return { install: 'npm install', add: 'npm install', @@ -70,11 +70,19 @@ export function getPackageManagerCommand( run: (script: string, args: string) => `npm run ${script} -- ${args}`, list: 'npm ls', }; - } + }, + }; + + return commands[packageManager](); } +/** + * Returns the version of the package manager used in the workspace. + * By default, the package manager is derived based on the lock file, + * but it can also be passed in explicitly. + */ export function getPackageManagerVersion( - packageManager: PackageManager + packageManager: PackageManager = detectPackageManager() ): string { return execSync(`${packageManager} --version`).toString('utf-8').trim(); } diff --git a/packages/workspace/src/command-line/connect-to-nx-cloud.ts b/packages/workspace/src/command-line/connect-to-nx-cloud.ts index c027bff7b1..fa004947b2 100644 --- a/packages/workspace/src/command-line/connect-to-nx-cloud.ts +++ b/packages/workspace/src/command-line/connect-to-nx-cloud.ts @@ -1,6 +1,6 @@ import { readNxJson } from '../core/file-utils'; import { output } from '../utilities/output'; -import { getPackageManagerCommand } from '@nrwl/tao/src/shared/package-manager'; +import { getPackageManagerCommand } from '@nrwl/devkit'; import { execSync } from 'child_process'; export async function connectToNxCloudUsingScan(scan: boolean): Promise { diff --git a/packages/workspace/src/command-line/nx-commands.ts b/packages/workspace/src/command-line/nx-commands.ts index 96ac04229a..85cf33b384 100644 --- a/packages/workspace/src/command-line/nx-commands.ts +++ b/packages/workspace/src/command-line/nx-commands.ts @@ -1,8 +1,7 @@ import { execSync } from 'child_process'; -import { getPackageManagerCommand } from '@nrwl/tao/src/shared/package-manager'; +import { getPackageManagerCommand, writeJsonFile } from '@nrwl/devkit'; import * as yargs from 'yargs'; import { nxVersion } from '../utils/versions'; -import { writeFileSync } from 'fs'; import * as path from 'path'; const noop = (yargs: yargs.Argv): yargs.Argv => yargs; @@ -445,20 +444,17 @@ function taoPath() { const { dirSync } = require('tmp'); const tmpDir = dirSync().name; - writeFileSync( - path.join(tmpDir, 'package.json'), - JSON.stringify({ - dependencies: { - '@nrwl/tao': 'latest', + writeJsonFile(path.join(tmpDir, 'package.json'), { + dependencies: { + '@nrwl/tao': 'latest', - // these deps are required for migrations written using angular devkit - '@angular-devkit/architect': 'latest', - '@angular-devkit/schematics': 'latest', - '@angular-devkit/core': 'latest', - }, - license: 'MIT', - }) - ); + // these deps are required for migrations written using angular devkit + '@angular-devkit/architect': 'latest', + '@angular-devkit/schematics': 'latest', + '@angular-devkit/core': 'latest', + }, + license: 'MIT', + }); execSync(packageManager.install, { cwd: tmpDir, diff --git a/packages/workspace/src/command-line/report.ts b/packages/workspace/src/command-line/report.ts index 24f6170267..f1575caea8 100644 --- a/packages/workspace/src/command-line/report.ts +++ b/packages/workspace/src/command-line/report.ts @@ -1,9 +1,11 @@ import * as chalk from 'chalk'; -import { execSync } from 'child_process'; import { appRootPath } from '../utilities/app-root'; -import { detectPackageManager } from '@nrwl/tao/src/shared/package-manager'; +import { + detectPackageManager, + getPackageManagerVersion, + readJsonFile, +} from '@nrwl/devkit'; import { output } from '../utilities/output'; -import { readJsonFile } from '../utilities/fileutils'; export const packagesWeCareAbout = [ 'nx', @@ -45,7 +47,7 @@ export const report = { */ function reportHandler() { const pm = detectPackageManager(); - const pmVersion = execSync(`${pm} --version`).toString('utf-8').trim(); + const pmVersion = getPackageManagerVersion(pm); const bodyLines = [ `Node : ${process.versions.node}`, diff --git a/packages/workspace/src/command-line/workspace-generators.ts b/packages/workspace/src/command-line/workspace-generators.ts index 0fb1eac92e..c08427e19d 100644 --- a/packages/workspace/src/command-line/workspace-generators.ts +++ b/packages/workspace/src/command-line/workspace-generators.ts @@ -5,19 +5,18 @@ import { copySync, removeSync } from 'fs-extra'; import * as path from 'path'; import * as yargsParser from 'yargs-parser'; import { appRootPath } from '../utilities/app-root'; -import { - detectPackageManager, - getPackageManagerCommand, -} from '@nrwl/tao/src/shared/package-manager'; -import { - fileExists, - readJsonFile, - writeJsonFile, -} from '../utilities/fileutils'; +import { fileExists } from '../utilities/fileutils'; import { output } from '../utilities/output'; import type { CompilerOptions } from 'typescript'; import { Workspaces } from '@nrwl/tao/src/shared/workspace'; -import { logger, normalizePath } from '@nrwl/devkit'; +import { + logger, + normalizePath, + getPackageManagerCommand, + detectPackageManager, + readJsonFile, + writeJsonFile, +} from '@nrwl/devkit'; import { generate } from '@nrwl/tao/src/commands/generate'; const rootDirectory = appRootPath; diff --git a/packages/workspace/src/executors/run-script/run-script.impl.ts b/packages/workspace/src/executors/run-script/run-script.impl.ts index 1b0f5cdd8c..2f40a730ac 100644 --- a/packages/workspace/src/executors/run-script/run-script.impl.ts +++ b/packages/workspace/src/executors/run-script/run-script.impl.ts @@ -1,6 +1,6 @@ import { execSync } from 'child_process'; -import { getPackageManagerCommand } from '@nrwl/tao/src/shared/package-manager'; -import { ExecutorContext } from '@nrwl/devkit'; +import { getPackageManagerCommand } from '@nrwl/devkit'; +import type { ExecutorContext } from '@nrwl/devkit'; import * as path from 'path'; export interface RunScriptOptions { diff --git a/packages/workspace/src/utilities/plugins/plugin-capabilities.ts b/packages/workspace/src/utilities/plugins/plugin-capabilities.ts index 38cf8858db..9942a0bd35 100644 --- a/packages/workspace/src/utilities/plugins/plugin-capabilities.ts +++ b/packages/workspace/src/utilities/plugins/plugin-capabilities.ts @@ -1,7 +1,6 @@ import * as chalk from 'chalk'; -import { getPackageManagerCommand } from '@nrwl/tao/src/shared/package-manager'; +import { getPackageManagerCommand, readJsonFile } from '@nrwl/devkit'; import { appRootPath } from '../app-root'; -import { readJsonFile } from '../fileutils'; import { output } from '../output'; import type { PluginCapabilities } from './models'; import { hasElements } from './shared';