externalSchematic executes schematics from migration.json instead of collection.json
- Vorherrschende Sprache
- TypeScript
- Sterne
- 27k
- Forks
- 11.8k
- Ø Merge
- 14 Std. 23 Min.
- Gemergte PRs (30 T.)
- 162
Beschreibung
# 🐞 Bug report
### Command
- [ ] new
- [ ] build
- [ ] serve
- [ ] test
- [ ] e2e
- [ ] generate
- [ ] add
- [x] update
- [ ] lint
- [ ] extract-i18n
- [ ] run
- [ ] config
- [ ] help
- [ ] version
- [ ] doc
### Is this a regression?
No
### Description
The function `externalSchematic` from `@angular-devkit/schematics` does not call the schematic from the `collection.json` but instead from the `migration.json` If the collection (package) name is the same as the current package that is migrated.
## 🔬 Minimal Reproduction
1. The package `ngx-my-lib` has the schematic `config` defined in the `collection.json`
2. Create a migration schematic for the package `ngx-my-lib`.
3. Call the externalSchematic function with `externalSchematic('ngx-my-lib', 'config')` in the migration schematic.
4. Execute the migration schematic
## 🔥 Exception or Error
Schematic "config" not found in collection "ngx-my-lib"
## 🌍 Your Environment
Angular CLI: 12.0.3
Node: 14.16.1
Package Manager: yarn 1.22.10
OS: linux x64
Angular: undefined
...
Package Version
------------------------------------------------------
@angular-devkit/architect 0.1200.3
@angular-devkit/core 12.0.3
@angular-devkit/schematics 12.0.3
@angular/cli 12.0.3
@schematics/angular 12.0.3
typescript 4.2.4
**Anything else relevant?**
I could track down this error to the `createCollection` method in the class `SchematicEngine`. Invoking the `externalSchematic` the `Collection` instance for the `migration.json` is cached with the key `ngx-my-lib`. So the external schematic execution does not load the collection for the `collection.json`, but for the `migration.json`.
Beitragsleitfaden
Rechercherichtung
Beginne mit SchematicEngine.createCollection und dem im Bericht beschriebenen externalSchematic-Aufruf. Verfolge anschließend, wie collection.json und migration.json unter demselben Paketnamen geladen und zwischengespeichert werden. Reproduziere das ngx-my-lib-Szenario und überprüfe, dass externalSchematic das Schematic aus collection.json statt aus migration.json auflöst.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- angular, typescript
- Bereich
- tooling
- Issue-Typ
- Bug
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Aktivitätsstatus
- Veraltet
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 35/100