angular/angular-cli · warning

Could not find @angular/cli version '${runnerVersion}'.

Error message

Could not find @angular/cli version '${runnerVersion}'.

What it means

checkCLIVersion computes the @angular/cli version that should run the update (via getCLIUpdateRunnerVersion) and fetches its manifest from the package manager. If the registry has no manifest for that version, it warns and returns null, causing cliVersionToInstall to treat the CLI as adequate rather than installing a temporary one.

Source

Thrown at packages/angular/cli/src/commands/update/utilities/cli-version.ts:66

 * Checks if the installed CLI version is compatible with the packages being updated.
 * @param packagesToUpdate The list of packages being updated.
 * @param logger The logger instance.
 * @param packageManager The package manager instance.
 * @param verbose Whether to log verbose output.
 * @param next Whether to check for the next version.
 * @returns The version of the CLI to install, or null if the current version is compatible.
 */
export async function checkCLIVersion(
  packagesToUpdate: string[],
  logger: logging.LoggerApi,
  packageManager: PackageManager,
  next = false,
): Promise<string | null> {
  const runnerVersion = getCLIUpdateRunnerVersion(packagesToUpdate, next);
  const manifest = await packageManager.getManifest(`@angular/cli@${runnerVersion}`);

  if (!manifest) {
    logger.warn(`Could not find @angular/cli version '${runnerVersion}'.`);

    return null;
  }

  const version = manifest.version;

  return VERSION.full === version ? null : String(runnerVersion);
}

/**
 * Determines the version of the CLI to use for the update process.
 * @param packagesToUpdate The list of packages being updated.
 * @param next Whether to use the next version.
 * @returns The version or tag to use for the CLI update runner.
 */
export function getCLIUpdateRunnerVersion(
  packagesToUpdate: string[] | undefined,
  next: boolean,

View on GitHub (pinned to bb72145f9a)

Solutions

  1. Point npm at the public npm registry (or ensure your proxy mirrors @angular/cli fully): check .npmrc registry settings.
  2. Run `npm view @angular/cli versions` / `npm view @angular/cli dist-tags` to confirm the needed version/tag exists on your registry.
  3. If offline, sync your registry mirror or connect to the network, then retry ng update.
  4. Proceed without action if acceptable — returning null means the CLI continues the update with the currently installed version.
  5. Update @angular/cli manually to a compatible version before running ng update.

Example fix

// before: .npmrc pointing to incomplete mirror
registry=https://internalmirror.local/npm
// after: scope @angular to public npm or fix mirror sync
registry=https://registry.npmjs.org/
Defensive patterns

Strategy: retry

Validate before calling

import { execSync } from 'node:child_process';
try {
  execSync('npm view @angular/cli@latest version', { stdio: 'pipe' });
} catch {
  throw new Error('@angular/cli not resolvable from configured registry; fix .npmrc or network');
}

Try / catch

const runner = await checkCLIVersion(pkgs, next);
if (runner === null) {
  logger.warn('CLI runner version unavailable from registry; continuing with installed CLI');
}

Prevention

When it happens

Trigger: Calling checkCLIVersion during `ng update` when packageManager.getManifest(`@angular/cli@${runnerVersion}`) returns null — e.g., the computed runner version/tag does not exist on the configured registry, or the fetch fails to resolve a manifest.

Common situations: Custom/internal registries that proxy npm but lack some @angular/cli dist-tags; offline environments; using --next against a registry with no 'next' dist-tag published yet; mirrors with stale metadata.

Related errors


AI-assisted analysis of angular/angular-cli@bb72145f9a (2026-08-30). Data as JSON: /api/errors/2a5f5dbc1ffd0ea6. Report an issue: GitHub.