Mamy już przygotowany folder pod nasz http-service Schematic. Stworzymy teraz w nim plik schema.json, określający zmienne jakie przyjmuje Schematic, które będziemy mogli przekazać w konsoli jako opcje:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
{ "$schema": "http://json-schema.org/schema", "id": "AngularLoveHttpServiceSchematic", "title": "Creates a httpService Schematic.", "type": "object", "properties": { "path": { "type": "string", "format": "path", "description": "The path to create the schematic within.", "visible": false }, "name": { "description": "Specifies the name of the generated Class.", "type": "string", "$default": { "$source": "argv", "index": 0 } } } } |
W tym momencie od użytkownika chcemy pobrać nazwę oraz ścieżkę do miejsca utworzenia pliku, stąd w properties dodajemy klucze path oraz name.
Dzięki powyższej definicji, możemy zawołać nasz schematic następującą komendą (oczywście trzeba jeszcze zbudować Schematic, ale o tym później;):
1 |
ng g angularlove:http-service core/flights/flight |
gdzie core/flights to ścieżka (property path), a ostatni człon to name reprezentujący encję Flight (property name). Później napiszemy kod, który zrozumie co jest ścieżką a co nazwą. Można również skorzystać z mniej wygodnej opcji:
1 |
ng g angularlove:http-service --path=core/flights --name=flight |
Plik schema.json jest również walidatorem, możemy w nim wymusić chociażby czy opcja jest wymagana lub np. jaka powinna być minimalna ilość znaków.
TIP!
Dobrą praktyką jest dodać plik schema.ts, określający interfejs możliwych opcji:
1 2 3 4 5 6 |
export interface HttpServiceOptions { /* The name of the component. */ name: string; /* The path to create the component. */ path?: string; } |
Przyda nam się później, wykorzystamy zalety typowania :-).
Kod:
https://github.com/tomasznastaly/angular-schematics-tutorial/pull/1/files