angular / angular/angular-cli

Angular Schematics - Apply thousands of changes on tree cause error "Maximum call stack size exceeded"

Offen
#17,851 1 Kommentar 3 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
area: @angular-devkit/schematics freq1: low severity3: broken type: bug/fix
Vorherrschende Sprache
TypeScript
Sterne
27k
Forks
11.8k
Ø Merge
14 Std. 23 Min.
Gemergte PRs (30 T.)
162

Beschreibung

# 🐞 Bug report

### Description

I use Angular Schematics to migrate from AngularJs to Angular. The application is a large one with thousands of page. I try to create a component for each page based on a template. When I try to create the component on a smaller project like 200 pages it's working but when I fall on a large one with more than 1000 pages (1000 schematics rules)

## 🔬 Minimal Reproduction



export function createPageComponents(options: any): Rule {
return (tree: Tree, context: SchematicContext) => {
const logger = context.logger;
const directory = tree.getDir('my_path/pages');

const rules: Rule[] = [];
directory.visit((filePath) => {
if (!filePath.endsWith('config.ts')) {
return;
}

const dirPath = dirname(filePath);
const parsedPath = parseName(dirPath, basename(filePath).split('.')[0]);
options = {
path: parsedPath.path,
name: parsedPath.name
};

const templateSource = apply(
url('./files'),
[
applyTemplates({
...strings,
...options
}),
move(parsedPath.path)
]
);

const rule = mergeWith(templateSource);

rules.push(rule);
});

return chain(rules);
};
}

## 🔥 Exception or Error



RangeError: Maximum call stack size exceeded
at Console.warn ()
at Observable._trySubscribe (my_path\node_modules\rxjs\internal\Observable.js:55:25)
at Observable.subscribe (my_path\node_modules\rxjs\internal\Observable.js:30:22)
at MergeMapOperator.call (my_path\node_modules\rxjs\internal\operators\mergeMap.js:39:23)
at Observable.subscribe (my_path\node_modules\rxjs\internal\Observable.js:25:31)
at MapOperator.call (my_path\node_modules\rxjs\internal\operators\map.js:32:23)
at Observable.subscribe (my_path\node_modules\rxjs\internal\Observable.js:25:31)
at MapToOperator.call (my_path\node_modules\rxjs\internal\operators\mapTo.js:26:23)
at Observable.subscribe (my_path\node_modules\rxjs\internal\Observable.js:25:31)
at DefaultIfEmptyOperator.call (my_path\node_modules\rxjs\internal\operators\defaultIfEmpty.js:27:23)

## 🌍 Your Environment



Angular CLI: 9.1.4
Node: 10.19.0
OS: win32 x64

Angular: 9.1.4
... animations, cli, common, compiler, compiler-cli, core, forms
... language-service, platform-browser, platform-browser-dynamic
... router
Ivy Workspace: Yes

Package Version
------------------------------------------------------------
@angular-devkit/architect 0.901.4
@angular-devkit/build-angular 0.901.4
@angular-devkit/build-ng-packagr 0.901.4
@angular-devkit/build-optimizer 0.901.4
@angular-devkit/build-webpack 0.901.4
@angular-devkit/core 9.1.4
@angular-devkit/schematics 9.1.7
@angular-devkit/schematics-cli 0.901.7
@angular/upgrade 9.1.9
@ngtools/webpack 9.1.4
@schematics/angular 9.1.4 (cli-only)
@schematics/schematics 0.901.7
@schematics/update 0.901.4
ng-packagr 9.1.3
rxjs 6.5.5
typescript 3.8.3
webpack 4.42.0

Beitragsleitfaden

Beitragsleitfaden öffnen

Rechercherichtung

Beginnen Sie am createPageComponents-Einstiegspunkt in der Reproduktion, insbesondere beim rules-Array und bei chain(rules), und reproduzieren Sie den Fehler mit mehr als 1.000 Schematics-Regeln. Lesen Sie den Angular-Schematics-Ausführungspfad zusammen mit dem im Report gezeigten RxJS-Stacktrace. Als erledigt gilt die Aufgabe, wenn die große Menge an Seitenkomponentenänderungen ohne einen Fehler wegen der maximalen Aufruftiefe angewendet werden kann.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
angular, typescript
Bereich
cli, tooling
Issue-Typ
Bug
Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Aktivitätsstatus
Veraltet
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
35/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.