angular/angular-cli · error · UnknownPackageManagerException
Unknown package manager "${packageManagerName}".
Error message
Unknown package manager "${packageManagerName}". What it means
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.
Source
Thrown at packages/angular_devkit/schematics/tasks/package-manager/executor.ts:62
installAll: 'install',
installPackage: 'install',
},
},
};
export class UnknownPackageManagerException extends BaseException {
constructor(name: string) {
super(`Unknown package manager "${name}".`);
}
}
export default function (
factoryOptions: NodePackageTaskFactoryOptions = {},
): TaskExecutor<NodePackageTaskOptions> {
const packageManagerName = factoryOptions.packageManager || 'npm';
const packageManagerProfile = packageManagers[packageManagerName];
if (!packageManagerProfile) {
throw new UnknownPackageManagerException(packageManagerName);
}
const rootDirectory = factoryOptions.rootDirectory || process.cwd();
return (options: NodePackageTaskOptions = { command: 'install' }) => {
let taskPackageManagerProfile = packageManagerProfile;
let taskPackageManagerName = packageManagerName;
if (factoryOptions.allowPackageManagerOverride && options.packageManager) {
taskPackageManagerProfile = packageManagers[options.packageManager];
if (!taskPackageManagerProfile) {
throw new UnknownPackageManagerException(options.packageManager);
}
taskPackageManagerName = options.packageManager;
}
const bufferedOutput: { stream: NodeJS.WriteStream; data: Buffer }[] = [];
const spawnOptions: SpawnOptions = {
shell: true,View on GitHub (pinned to bb72145f9a)
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')
Example fix
// before
createPackageManagerTask({ packageManager: 'bun' }); // unknown
// after
createPackageManagerTask({ packageManager: 'pnpm' }); // supported profile Defensive patterns
Strategy: validation
Validate before calling
const supported = ['npm', 'yarn', 'pnpm']; // matches devkit packageManagers map
if (!supported.includes(factoryOptions.packageManager ?? 'npm')) {
throw new Error(`Unsupported package manager: ${factoryOptions.packageManager}`);
} Type guard
type PackageManager = 'npm' | 'yarn' | 'pnpm';
function isPackageManager(v: unknown): v is PackageManager {
return v === 'npm' || v === 'yarn' || v === 'pnpm';
} Try / catch
try {
const executor = packageTaskFactory({ packageManager });
} catch (e) {
if (/Unknown package manager/.test(String(e))) {
return packageTaskFactory(); // default npm
} else throw e;
} Prevention
- 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
When it happens
Trigger: 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.
Common situations: 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.
Related errors
- Option "project" is required.
- Project is not defined in this workspace.
- Targets are not defined for this project.
- Unknown package manager "${options.packageManager}".
- Package ${JSON.stringify(name)} was found but does not suppo
AI-assisted analysis of angular/angular-cli@bb72145f9a (2026-08-30).
Data as JSON: /api/errors/9a6e64a65fdc81e9.
Report an issue: GitHub.