diff --git a/packages/angular/cli/lib/cli/index.ts b/packages/angular/cli/lib/cli/index.ts index 355b39ed00..d7a1aac4e9 100644 --- a/packages/angular/cli/lib/cli/index.ts +++ b/packages/angular/cli/lib/cli/index.ts @@ -11,10 +11,8 @@ import { format } from 'util'; import { CommandModuleError } from '../../src/command-builder/command-module'; import { runCommand } from '../../src/command-builder/command-runner'; import { colors, removeColor } from '../../src/utilities/color'; -import { AngularWorkspace, getWorkspaceRaw } from '../../src/utilities/config'; import { ngDebug } from '../../src/utilities/environment-options'; import { writeErrorToLogFile } from '../../src/utilities/log-file'; -import { findWorkspaceFile } from '../../src/utilities/project'; export { VERSION } from '../../src/utilities/version'; @@ -51,30 +49,8 @@ export default async function (options: { testing?: boolean; cliArgs: string[] } logger.error(format(...args)); }; - let workspace; - const workspaceFile = findWorkspaceFile(); - if (workspaceFile === null) { - const [, localPath] = getWorkspaceRaw('local'); - if (localPath !== null) { - logger.fatal( - `An invalid configuration file was found ['${localPath}'].` + - ' Please delete the file before running the command.', - ); - - return 1; - } - } else { - try { - workspace = await AngularWorkspace.load(workspaceFile); - } catch (e) { - logger.fatal(`Unable to read workspace file '${workspaceFile}': ${e.message}`); - - return 1; - } - } - try { - return await runCommand(options.cliArgs, logger, workspace); + return await runCommand(options.cliArgs, logger); } catch (err) { if (err instanceof CommandModuleError) { logger.fatal(`Error: ${err.message}`); diff --git a/packages/angular/cli/src/command-builder/command-module.ts b/packages/angular/cli/src/command-builder/command-module.ts index e216dba749..072eb7ae0c 100644 --- a/packages/angular/cli/src/command-builder/command-module.ts +++ b/packages/angular/cli/src/command-builder/command-module.ts @@ -38,6 +38,7 @@ export interface CommandContext { currentDirectory: string; root: string; workspace?: AngularWorkspace; + globalConfiguration?: AngularWorkspace; logger: logging.Logger; packageManager: PackageManager; /** Arguments parsed in free-from without parser configuration. */ diff --git a/packages/angular/cli/src/command-builder/command-runner.ts b/packages/angular/cli/src/command-builder/command-runner.ts index 65da7de29b..2359956158 100644 --- a/packages/angular/cli/src/command-builder/command-runner.ts +++ b/packages/angular/cli/src/command-builder/command-runner.ts @@ -28,7 +28,7 @@ import { TestCommandModule } from '../commands/test/cli'; import { UpdateCommandModule } from '../commands/update/cli'; import { VersionCommandModule } from '../commands/version/cli'; import { colors } from '../utilities/color'; -import { AngularWorkspace } from '../utilities/config'; +import { AngularWorkspace, getWorkspace } from '../utilities/config'; import { getPackageManager } from '../utilities/package-manager'; import { CommandContext, CommandModuleError, CommandScope } from './command-module'; import { addCommandModuleToYargs, demandCommandFailureMessage } from './utilities/command'; @@ -57,11 +57,7 @@ const COMMANDS = [ const yargsParser = Parser as unknown as typeof Parser.default; -export async function runCommand( - args: string[], - logger: logging.Logger, - workspace: AngularWorkspace | undefined, -): Promise { +export async function runCommand(args: string[], logger: logging.Logger): Promise { const { $0, _: positional, @@ -70,7 +66,23 @@ export async function runCommand( ...rest } = yargsParser(args, { boolean: ['help', 'json-help'], alias: { 'collection': 'c' } }); + let workspace: AngularWorkspace | undefined; + let globalConfiguration: AngularWorkspace | undefined; + try { + [workspace, globalConfiguration] = await Promise.all([ + getWorkspace('local'), + getWorkspace('global'), + ]); + } catch (e) { + logger.fatal(e.message); + + return 1; + } + + const root = workspace?.basePath ?? process.cwd(); + const context: CommandContext = { + globalConfiguration, workspace, logger, currentDirectory: process.cwd(), diff --git a/packages/angular/cli/src/command-builder/schematics-command-module.ts b/packages/angular/cli/src/command-builder/schematics-command-module.ts index 9bc64674f5..ab548b0ece 100644 --- a/packages/angular/cli/src/command-builder/schematics-command-module.ts +++ b/packages/angular/cli/src/command-builder/schematics-command-module.ts @@ -15,12 +15,7 @@ import { } from '@angular-devkit/schematics/tools'; import type { CheckboxQuestion, Question } from 'inquirer'; import { Argv } from 'yargs'; -import { - getProjectByCwd, - getProjectsByPath, - getSchematicDefaults, - getWorkspace, -} from '../utilities/config'; +import { getProjectByCwd, getProjectsByPath, getSchematicDefaults } from '../utilities/config'; import { isTTY } from '../utilities/tty'; import { CommandModule, @@ -272,11 +267,11 @@ export abstract class SchematicsCommandModule return undefined; }; - const localWorkspace = await getWorkspace('local'); - if (localWorkspace) { - const project = getProjectByCwd(localWorkspace); + const { workspace, globalConfiguration } = this.context; + if (workspace) { + const project = getProjectByCwd(workspace); if (project) { - const value = getSchematicCollections(localWorkspace.getProjectCli(project)); + const value = getSchematicCollections(workspace.getProjectCli(project)); if (value) { this._schematicCollections = value; @@ -285,10 +280,9 @@ export abstract class SchematicsCommandModule } } - const globalWorkspace = await getWorkspace('global'); const value = - getSchematicCollections(localWorkspace?.getCli()) ?? - getSchematicCollections(globalWorkspace?.getCli()); + getSchematicCollections(workspace?.getCli()) ?? + getSchematicCollections(globalConfiguration?.getCli()); if (value) { this._schematicCollections = value;