Description
Command
generate
Is this a regression?
- Yes, this behavior used to work in the previous version
The previous version in which this bug was not present was
No response
Description
If you try to override standard Angular Schematics with a custom one by the use of schematicCollections option in angular.json file like for instance:
"cli": { "analytics": false, "schematicCollections": [ "./schematics", "@schematics/angular" ] }
And create your custom schematics (index.ts):
`import {
externalSchematic,
Rule,
SchematicContext,
Tree
} from '@angular-devkit/schematics';
import { Schema as ComponentOptions } from '@schematics/angular/component/schema';
export function generateComponent(options: ComponentOptions): Rule {
console.log('Custom schematics for generate component triggered...');
return (_tree: Tree, _context: SchematicContext) => {
return externalSchematic(
"@schematics/angular",
"component",
options
);
};
}`
It will end up with an error message like this one:
Collection "D" cannot be resolved.
Where D refers to the drive letter of the project folder location.
Minimal Reproduction
Please use the attached repo to reproduce the issue:
schematics-test.zip
Run npm install and then try to generate a component using:
ng g c
command.
Exception or Error
Your Environment
Angular CLI: 19.1.5
Node: 22.13.0
Package Manager: npm 8.6.0
OS: win32 x64
Angular: 19.1.4
... animations, common, compiler, compiler-cli, core, forms
... platform-browser, platform-browser-dynamic, router
Package Version
---------------------------------------------------------
@angular-devkit/architect 0.1901.5
@angular-devkit/build-angular 19.1.5
@angular-devkit/core 19.1.5
@angular-devkit/schematics 19.1.5
@angular/cli 19.1.5
@schematics/angular 19.1.5
rxjs 7.8.1
typescript 5.7.3
zone.js 0.15.0
Anything else relevant?
The error is caused by parseSchematicInfo method defined in SchematicsCommandModule in file:
@angular\cli\src\command-builder\schematics-command-module.js
Modifying the function as follows:
parseSchematicInfo(schematic) { if (schematic?.includes(':')) { const segments = schematic.split(':'); const [collectionName, schematicName] = [segments.slice(0, -1).join(':'), segments.at(-1)]; return [collectionName, schematicName]; } return [undefined, schematic]; }
Seems to fix the problem.
The issue is also present in v18.