{"record":{"id":"af2138ed397c9d71","repo":"angular/angular-cli","slug":"the-configured-package-manager-this-descriptor","errorCode":null,"errorMessage":"The configured package manager, '${this.descriptor.binary}', does not support a custom registry.","messagePattern":"The configured package manager, '(.+?)', does not support a custom registry\\.","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/angular/cli/src/package-managers/package-manager.ts","lineNumber":201,"sourceCode":"      }\n    }\n  }\n\n  async #run(\n    args: readonly string[],\n    options: { timeout?: number; registry?: string; cwd?: string } = {},\n  ): Promise<{ stdout: string; stderr: string }> {\n    return this.#runWithThrottle(async () => {\n      this.ensureInstalled();\n\n      const { registry, cwd, ...runOptions } = options;\n      const finalArgs = [...args];\n      let finalEnv: Record<string, string> | undefined;\n\n      if (registry) {\n        const registryOptions = this.descriptor.getRegistryOptions?.(registry);\n        if (!registryOptions) {\n          throw new Error(\n            `The configured package manager, '${this.descriptor.binary}', does not support a custom registry.`,\n          );\n        }\n\n        if (registryOptions.args) {\n          finalArgs.push(...registryOptions.args);\n        }\n        if (registryOptions.env) {\n          finalEnv = registryOptions.env;\n        }\n      }\n\n      const executionDirectory = cwd ?? this.cwd;\n      if (this.options.dryRun) {\n        this.options.logger?.info(\n          `[DRY RUN] Would execute in [${executionDirectory}]: ${this.descriptor.binary} ${finalArgs.join(' ')}`,\n        );\n","sourceCodeStart":183,"sourceCodeEnd":219,"githubUrl":"https://github.com/angular/angular-cli/blob/bb72145f9ab45aee29f523236b3a25cd0813a841/packages/angular/cli/src/package-managers/package-manager.ts#L183-L219","documentation":"Thrown by the package manager's #run method when a custom registry is requested but the resolved package manager descriptor does not define getRegistryOptions, i.e. the manager has no CLI flags for pointing at a custom registry. The command is aborted rather than run against the wrong registry.","triggerScenarios":"Calling install/add/acquireTempPackage (or registry-backed fetches during ng update) with a registry argument while using a package manager descriptor without registry support; custom registry passthrough used with an exotic manager.","commonSituations":"Corporate environments requiring an internal npm registry mirror; scripts passing --registry-style options generically regardless of manager; descriptor set for a manager (like a shimmed binary) that lacks registry option mapping.","solutions":["Configure the registry natively via .npmrc/.yarnrc.yml/pnpm config instead of passing a custom registry to the CLI call.","Use a supported package manager (npm/yarn/pnpm) whose descriptor supports registries.","Remove the registry parameter so the manager's default configuration is used.","Update Angular CLI so the descriptor for your manager includes getRegistryOptions."],"exampleFix":"// before\npm.install({ registry: 'https://registry.mycompany.com' })  // manager lacks registry support\n// after (.npmrc)\nregistry=https://registry.mycompany.com\n// then\npm.install()","handlingStrategy":"fallback","validationCode":"const supportsRegistry = typeof descriptor.getRegistryOptions === 'function';\nif (registry && !supportsRegistry) {\n  // fall back to native config (.npmrc) instead of passing registry to the call\n}","typeGuard":"function supportsCustomRegistry(descriptor) {\n  return typeof descriptor?.getRegistryOptions === 'function';\n}","tryCatchPattern":"try {\n  await pm.install({ registry });\n} catch (e) {\n  if (e.message.includes('does not support a custom registry')) {\n    // write registry into .npmrc / .yarnrc.yml and invoke install without the registry option\n  }\n}","preventionTips":["Configure corporate registries via .npmrc/.yarnrc.yml rather than per-call options.","Check whether the active manager descriptor supports registries before passing one.","Keep one canonical registry configuration for all tooling.","Pin to npm/yarn/pnpm when custom-registry passthrough is required."],"tags":["angular-cli","package-manager","registry","configuration"],"backgroundTag":"custom-registry-unsupported","analyzedSha":"bb72145f9ab45aee29f523236b3a25cd0813a841","analyzedAt":"2026-08-30T02:47:34.745Z","schemaVersion":2},"datasetVersion":"2026-08-30T03:17:51.788Z"}