angular/angular-cli · warning

Package ${name} was not found on the registry. Skipping.

Error message

Package ${name} was not found on the registry. Skipping.

What it means

When building the set of npm dependencies to update, each raw dependency is tested with isPkgFromRegistry to confirm the specifier refers to a registry package. If that check throws (e.g., the package or version cannot be resolved against the registry), the CLI warns that the package was not found and filters it out of the update (returns false).

Source

Thrown at packages/angular/cli/src/commands/update/update-resolver.ts:892

  const rawJson = readFileSync(packageJsonPath, 'utf8');
  const packageJsonContent = JSON.parse(rawJson) as PackageManifest;

  const getDependencies = (deps: Record<string, string> | undefined) =>
    Object.entries(deps ?? {}).map(([name, range]) => [name, range] as const);

  const allRawDeps = [
    ...getDependencies(packageJsonContent.dependencies),
    ...getDependencies(packageJsonContent.devDependencies),
    ...getDependencies(packageJsonContent.peerDependencies),
  ];

  const npmDeps = new Map(
    allRawDeps.filter(([name, specifier]) => {
      try {
        return isPkgFromRegistry(name, specifier);
      } catch {
        logger.warn(`Package ${name} was not found on the registry. Skipping.`);

        return false;
      }
    }) as [string, VersionRange][],
  );

  const packagesOption = options.packages ?? [];
  const normalizedPackages = packagesOption.reduce((acc, curr) => {
    return acc.concat(curr.split(','));
  }, [] as string[]);
  options.packages = normalizedPackages;

  if (options.migrateOnly && options.from) {
    if (options.packages.length !== 1) {
      throw new Error('--from requires that only a single package be passed.');
    }
  }

View on GitHub (pinned to bb72145f9a)

Solutions

  1. Check the package name and specifier in package.json for typos and correct them.
  2. If it's a private package, ensure the registry scope is configured (.npmrc with the right registry/auth) and you are authenticated.
  3. Verify network/registry access (npm ping / curl the registry URL); fix proxy or VPN settings if needed.
  4. Proceed if the skip is fine — the CLI updates remaining registry packages and leaves the skipped one untouched.
  5. Temporarily remove the problematic dependency, run the update, then re-add it.

Example fix

// before: package.json with unresolvable dep
"dependencies": { "@myorg/ui": "^1.0.0" }  // private, no registry configured
// after: .npmrc adds scope registry
@myorg:registry=https://npm.mycompany.com/
//always-auth=true
Defensive patterns

Strategy: validation

Validate before calling

for (const [name, spec] of Object.entries(pkg.dependencies ?? {})) {
  if (spec.startsWith('file:') || spec.startsWith('git') || spec.startsWith('link:')) continue;
  const res = await fetch(`https://registry.npmjs.org/${encodeURIComponent(name)}`);
  if (!res.ok) console.warn(`${name} not resolvable on registry; ng update will skip it`);
}

Type guard

function isRegistrySpec(spec: string): boolean {
  return !/^(file:|git(\+|:)|link:|http:\/\/|\.\.?\/)/.test(spec);
}

Try / catch

try {
  await ngUpdate(pkgs);
} catch (e) {
  const skipped = /was not found on the registry/.exec(String(e));
  if (skipped) logger.warn(`${skipped[1]} skipped; update it separately once registry access works`);
}

Prevention

When it happens

Trigger: Running `ng update` when the project's package.json contains a dependency whose name/specifier cannot be validated against the npm registry — isPkgFromRegistry throws inside the filter over allRawDeps, and the dependency is skipped.

Common situations: Private packages not present on the configured registry; typo'd package names; offline/air-gapped environments or proxy misconfigurations; git/file/tarball URL dependencies mixed with registry updates; registry outage (npm 503s).

Related errors


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