{"record":{"id":"9a6e64a65fdc81e9","repo":"angular/angular-cli","slug":"unknown-package-manager-packagemanagername","errorCode":null,"errorMessage":"Unknown package manager \"${packageManagerName}\".","messagePattern":"Unknown package manager \"(.+?)\"\\.","errorType":"exception","errorClass":"UnknownPackageManagerException","httpStatus":null,"severity":"error","filePath":"packages/angular_devkit/schematics/tasks/package-manager/executor.ts","lineNumber":62,"sourceCode":"      installAll: 'install',\n      installPackage: 'install',\n    },\n  },\n};\n\nexport class UnknownPackageManagerException extends BaseException {\n  constructor(name: string) {\n    super(`Unknown package manager \"${name}\".`);\n  }\n}\n\nexport default function (\n  factoryOptions: NodePackageTaskFactoryOptions = {},\n): TaskExecutor<NodePackageTaskOptions> {\n  const packageManagerName = factoryOptions.packageManager || 'npm';\n  const packageManagerProfile = packageManagers[packageManagerName];\n  if (!packageManagerProfile) {\n    throw new UnknownPackageManagerException(packageManagerName);\n  }\n\n  const rootDirectory = factoryOptions.rootDirectory || process.cwd();\n\n  return (options: NodePackageTaskOptions = { command: 'install' }) => {\n    let taskPackageManagerProfile = packageManagerProfile;\n    let taskPackageManagerName = packageManagerName;\n    if (factoryOptions.allowPackageManagerOverride && options.packageManager) {\n      taskPackageManagerProfile = packageManagers[options.packageManager];\n      if (!taskPackageManagerProfile) {\n        throw new UnknownPackageManagerException(options.packageManager);\n      }\n      taskPackageManagerName = options.packageManager;\n    }\n\n    const bufferedOutput: { stream: NodeJS.WriteStream; data: Buffer }[] = [];\n    const spawnOptions: SpawnOptions = {\n      shell: true,","sourceCodeStart":44,"sourceCodeEnd":80,"githubUrl":"https://github.com/angular/angular-cli/blob/bb72145f9ab45aee29f523236b3a25cd0813a841/packages/angular_devkit/schematics/tasks/package-manager/executor.ts#L44-L80","documentation":"The NodePackage task executor factory resolves a profile from its packageManagers map (default 'npm'). If factoryOptions.packageManager names an unsupported manager, it throws UnknownPackageManagerException at task creation time.","triggerScenarios":"Calling createTaskExecutor/createPackageManagerTask with factoryOptions.packageManager set to a string not in the map (e.g. 'bun', 'pnpm@8', a typo like 'npn') when the installed schematics version lacks that profile.","commonSituations":"Custom builders/schematics passing through a repo-configured package manager that the toolchain version predates; typos in angular.json or workspace config; forcing a manager via factory options in older CLI versions.","solutions":["Use a supported value: 'npm', 'yarn', 'pnpm' (check the version's packageManagers map)","Fix typos in the packageManager option or workspace configuration","Upgrade @angular-devkit/schematics / Angular CLI to a version that supports your package manager","Omit factoryOptions.packageManager to fall back to the default ('npm')"],"exampleFix":"// before\ncreatePackageManagerTask({ packageManager: 'bun' }); // unknown\n// after\ncreatePackageManagerTask({ packageManager: 'pnpm' }); // supported profile","handlingStrategy":"validation","validationCode":"const supported = ['npm', 'yarn', 'pnpm']; // matches devkit packageManagers map\nif (!supported.includes(factoryOptions.packageManager ?? 'npm')) {\n  throw new Error(`Unsupported package manager: ${factoryOptions.packageManager}`);\n}","typeGuard":"type PackageManager = 'npm' | 'yarn' | 'pnpm';\nfunction isPackageManager(v: unknown): v is PackageManager {\n  return v === 'npm' || v === 'yarn' || v === 'pnpm';\n}","tryCatchPattern":"try {\n  const executor = packageTaskFactory({ packageManager });\n} catch (e) {\n  if (/Unknown package manager/.test(String(e))) {\n    return packageTaskFactory(); // default npm\n  } else throw e;\n}","preventionTips":["Restrict configurable package managers to an enum of supported values","Upgrade the devkit when adding support for new managers","Validate config values (angular.json, env vars) against the enum at startup"],"tags":["schematics","package-manager","configuration","angular"],"backgroundTag":"unknown-package-manager","analyzedSha":"bb72145f9ab45aee29f523236b3a25cd0813a841","analyzedAt":"2026-08-30T02:47:34.745Z","schemaVersion":2},"datasetVersion":"2026-08-30T03:17:51.788Z"}