12. TemplateSource, Apply, MergeWithUdało nam się wygenerować plik!
Rozłóżmy to na czynniki:
- templateSource – to jest katalog .files, który jest zasobem, na którym chcemy przeprowadzić szereg operacji
- apply – to funkcja, która przyjmuje zasób i aplikuje na nim wiele Rules przekazane w tablicy (tutaj template + move)
- mergeWith – łączy zasób z drzewem za pomocą konkretnej strategii (czyli pliki z katalogu files z plikami aplikacji)
1 2 3 4 5 6 7 8 9 10 11 12 13 |
// apply - nakłada wiele Rules na zasób (katalog files) i zwraca stransformowany zasób const templateSource = apply(url('./files'), [ // template zwraca Rule, odpowiadający za stworzenie templatki template({ ...strings, // przekazuję obiekt z utilsami, aby były dostępne w templatce ...options, // przekazuję obiekt z opcjami pobranymi od użytkownika, aby w templatce mieć dostęp do nich }), // rule move dba o to aby plik trafił w docelowe miejsce move(movePath), ]); // mergeWith łączy drzewo z zasobem const rule = mergeWith(templateSource, MergeStrategy.Default); |
Zastosowałem tutaj domyślną strategię łączenia. Z racji, że jest domyślna, to można ją oczywiście pominąć w kodzie. Ale jakie są dostępne jeszcze?
1 2 3 4 5 6 7 8 9 |
export declare enum MergeStrategy { AllowOverwriteConflict = 2, AllowCreationConflict = 4, AllowDeleteConflict = 8, Default = 0, Error = 1, ContentOnly = 2, Overwrite = 14 // nadpisz wszystko ostatnią zmianą } |
https://github.com/angular/angular-cli/blob/master/packages/angular_devkit/schematics/src/tree/interface.ts
TIP:
Funkcja template jest generykiem, więc można dobrze otypować co dokładnie chcemy przekazać do templatki:
1 |
export declare function template<T>(options: T): Rule; |