Przepisy na Angulara
ENPrzepisy na Angulara dla agentów AI działają, gdy spełnione są trzy warunki: agent wie, że pisze w Angularze 22 (zoneless, domyślnie OnPush, stabilne Signal Forms), może odpytać serwer MCP Angular CLI zamiast zgadywać, a każda zmiana przechodzi ng build, ng test uruchamiany przez Vitest i test w Playwright.
Ta strona jest dla programistów, którzy oddają pisanie kodu Angular agentom Claude Code, Codex lub Cursor. Scenariusz jest znajomy: agent tworzy komponent, który się kompiluje, spec przechodzi, a widok nigdy się nie odświeża. Agent zmienił zwykłe pole klasy tak, jak pozwalał na to Angular z Zone.js, a w twojej aplikacji nie ma już Zone.js, który by to zauważył. Albo dostajesz serwisy na BehaviorSubject, *ngIf, @HostListener i test z fakeAsync, który nie ruszy pod Vitestem.
Co dają te przepisy na Angulara
Dział zatytułowany „Co dają te przepisy na Angulara”- Konfigurację jednym poleceniem, która daje agentowi oficjalny plik dobrych praktyk Angulara i serwer MCP Angular CLI
- Dziesięć promptów do wklejenia dla aktualnego Angulara: komponenty, serwisy, Signal Forms, interceptory, routing, NgRx SignalStore, SSR, migracja do zoneless, mikrofrontendy i dyrektywy
- Tabelę bramek, które zatwierdzają zmianę w Angularze bez czytania każdej linii
- Typowe dla Angulara sposoby, w jakie psuje się kod agenta, i wyjście z każdego z nich
Których domyślnych ustawień Angulara 22 agenci nie znają?
Dział zatytułowany „Których domyślnych ustawień Angulara 22 agenci nie znają?”Agenci uczyli się na dekadzie kodu z NgModule, Zone.js i dekoratorami. Poniższe aktualne API i ustawienia domyślne są sprzeczne z większością tych danych:
| Agent pisze | Co robi Angular 22 | Zamiast tego |
|---|---|---|
| Zwykłe pole klasy zmieniane w handlerze, w nadziei, że widok się odświeży | Nowe aplikacje z CLI są zoneless (opcja zoneless schematu aplikacji ma domyślnie true), a ChangeDetectionStrategy.OnPush jest strategią domyślną | signal() lub computed() odczytywane w szablonie |
changeDetection: ChangeDetectionStrategy.Default | Default jest przestarzałe na rzecz Eager | Pomiń; Eager dodawaj tylko z zapisanym uzasadnieniem |
provideExperimentalZonelessChangeDetection() | @angular/core 22.2.0 tego nie eksportuje | provideZonelessChangeDetection() albo nic w nowej aplikacji |
FormGroup w nowym formularzu | Signal Forms (@angular/forms/signals: form(), [formField]) są publicznym API od 22.0 | Signal Forms; typowane formularze reaktywne tylko w istniejących formularzach |
fakeAsync i tick() w specach | ng test domyślnie uruchamia Vitest i ładuje zone.js/testing tylko wtedy, gdy polyfille aplikacji zawierają zone.js | Sztuczne timery Vitesta (vi.useFakeTimers()) lub await fixture.whenStable() |
provideClientHydration(withIncrementalHydration()) | Hydracja przyrostowa jest włączona domyślnie; withIncrementalHydration() jest przestarzałe od 22.0 | provideClientHydration(), ewentualnie z withEventReplay() |
@HostListener, @HostBinding, ngClass, CommonModule | Oficjalne instrukcje Angulara dla AI zakazują ich w nowym kodzie | Obiekt host w dekoratorze, wiązania class i style, importy pojedynczych dyrektyw |
Następna sekcja wpisuje te reguły w kontekst agenta, żeby nie trzeba było ich powtarzać w każdym prompcie.
Daj agentowi kontekst i serwer MCP od samego Angulara
Dział zatytułowany „Daj agentowi kontekst i serwer MCP od samego Angulara”Angular CLI dostarcza dwie rzeczy napisane z myślą o agentach. Schemat ai-config zapisuje oficjalny plik instrukcji z dobrymi praktykami Angulara i konfigurację MCP dla twojego narzędzia. Polecenie ng mcp uruchamia serwer MCP Angular CLI, którego domyślne narzędzia to między innymi get_best_practices, search_documentation, list_projects, run_target (cele build i test), narzędzia do uruchamiania, zatrzymywania i oczekiwania na serwer deweloperski oraz onpush_zoneless_migration.
Wygeneruj CLAUDE.md i projektowy .mcp.json z katalogu głównego repozytorium:
npx ng generate ai-config --tool=claude-codeJeśli CLAUDE.md już istnieje, schemat (sprawdzone w @schematics/angular 22.2.0) zostawia go bez zmian i wypisuje ostrzeżenie, a do istniejącego .mcp.json dopisuje serwer angular-cli w mcpServers. Aby przenieść wskazówki Angulara do własnego pliku, tymczasowo przenieś CLAUDE.md w inne miejsce, uruchom polecenie i scal oba pliki ręcznie. Aby dodać tylko serwer MCP, w zakresie projektu, żeby korzystał z niego cały zespół:
claude mcp add --scope project angular-cli -- npx -y @angular/cli mcpWygeneruj AGENTS.md i .codex/config.toml:
npx ng generate ai-config --tool=open-ai-codexAlbo dodaj sam serwer do konfiguracji użytkownika:
codex mcp add angular-cli -- npx -y @angular/cli mcpCodex czyta projektowy AGENTS.md tylko w zaufanych projektach (od 0.150.0), więc oznacz katalog projektu jako zaufany, gdy Codex o to zapyta.
Wygeneruj AGENTS.md (plik dobrych praktyk Angulara) i .cursor/mcp.json:
npx ng generate ai-config --tool=cursorNastępnie otwórz ustawienia MCP w Cursorze, sprawdź, czy angular-cli jest na liście i włączony, i skopiuj dobre praktyki z wygenerowanego AGENTS.md do projektowej reguły (Rule), żeby ładowała je każda sesja agenta.
Pod wygenerowanym blokiem dopisz fakty o projekcie, których schemat nie zna:
## This repository- Angular 22.2, standalone only, zoneless. Tests: `npx ng test --watch=false` (Vitest). Lint: `npx ng lint`.- State: signals in components; NgRx SignalStore (`@ngrx/signals` 22) for shared feature state.- New forms use Signal Forms. Never add `zone.js`, `fakeAsync`, `@HostListener` or `CommonModule`.- Before you finish: `npx ng build` and `npx ng test --watch=false` must both pass. Paste their last lines.Najważniejsza jest linia z ng build. Build produkcyjny sprawdza typy w każdym szablonie, więc błędna nazwa inputu albo brakujący import wychodzi tam, a nie dopiero podczas code review. Uzasadnienie plików kontekstu projektu znajdziesz w tekście jak przygotować kod dla agenta.
Jak uruchomić przepis w każdym narzędziu
Dział zatytułowany „Jak uruchomić przepis w każdym narzędziu”Prompty nie zależą od narzędzia. Różni się to, jak każde z nich uruchamia pętlę weryfikacji.
Wklej prompt do sesji interaktywnej; od v2.1.283 (oba kanały wydań, stan na 2026-10-12) sesja startuje w trybie auto. Aby uruchomić przepis bez interakcji w skrypcie, zezwól tylko na potrzebne polecenia:
claude -p "$(cat prompts/angular-product-card.txt)" \ --permission-mode acceptEdits \ --allowedTools "Bash(npx ng build *)" "Bash(npx ng test *)"Wklej prompt do TUI albo uruchom go nieinteraktywnie z prawem zapisu ograniczonym do katalogu roboczego:
codex exec --sandbox workspace-write "$(cat prompts/angular-product-card.txt)"Przy długim refaktoringu, takim jak migracja do zoneless, codex cloud (eksperymentalne w 0.157.1) pozwala przejrzeć zadanie w chmurze i zastosować jego diff lokalnie; codex apply nakłada ostatni diff przez git apply.
Wklej prompt do czatu agenta i dołącz jako kontekst folder docelowy oraz plik z typami modelu danych (np. src/app/models/product.ts). Przy przepisach, które dotykają wielu plików, jak routing czy SSR, zacznij w Plan Mode i zatwierdź plan, zanim powstanie jakikolwiek kod. Przejrzyj diff w edytorze i zostaw w prompcie polecenia build i test, żeby agent uruchomił je w terminalu przed zakończeniem.
Zbuduj komponent standalone na sygnałach
Dział zatytułowany „Zbuduj komponent standalone na sygnałach”Każdy prompt w tej sekcji podaje plik, API sygnałów i dowód, którego oczekujesz. Styl nazw plików z 2025 roku (product-card.ts, nie product-card.component.ts) jest domyślny w CLI 22.x.
Czego to dowodzi: spec ustawia inputy przez setInput() i sprawdza wyrenderowany tekst, więc nie przejdzie, jeśli szablon czyta nieaktualne pole. Spec, który tylko wywołuje metody komponentu, nie mówi nic o wykrywaniu zmian.
Zastąp serwisy na BehaviorSubject sygnałami i httpResource
Dział zatytułowany „Zastąp serwisy na BehaviorSubject sygnałami i httpResource”resource() i httpResource() są publicznym API od 22.0, a oficjalne wytyczne CLI zalecają inject() i dekorator @Service dla nowych singletonów. Zostaw RxJS tam, gdzie masz prawdziwe strumienie; stan przenieś do sygnałów.
Zbuduj formularz rejestracji na Signal Forms
Dział zatytułowany „Zbuduj formularz rejestracji na Signal Forms”Signal Forms zastępują okablowanie FormGroup modelem w sygnale, funkcją schematu i dyrektywą [formField]. Potrzebne walidatory (required, email, minLength, pattern, validate, validateAsync, validateHttp, applyWhen, hidden, disabled) eksportuje @angular/forms/signals w wersji 22.2.0.
Istniejącego formularza reaktywnego nie przepisuj w tej samej zmianie. Najpierw poproś o poprawki typowania z NonNullableFormBuilder, potem migruj jeden formularz na pull request, bez zmiany testów. Wtedy testy stają się wyrocznią dla migracji.
Połącz funkcyjne interceptory HTTP w łańcuch
Dział zatytułowany „Połącz funkcyjne interceptory HTTP w łańcuch”Test równoczesnych 401 wyłapuje prawdziwe błędy. Agenci piszą odświeżanie tokena, które działa dla jednego żądania, a przy dashboardzie z trzema widżetami odpala trzy odświeżenia naraz.
Ładuj trasy leniwie ze strażnikami i resolverami
Dział zatytułowany „Ładuj trasy leniwie ze strażnikami i resolverami”Ostatnia linia zamienia pytanie „czy to naprawdę ładuje się leniwie?” w dowód. Jeśli komponenty admina trafiają do chunków początkowych, prompt nie zadziałał, niezależnie od tego, jak wygląda diff.
Zarządzaj stanem modułu funkcji przez NgRx SignalStore
Dział zatytułowany „Zarządzaj stanem modułu funkcji przez NgRx SignalStore”Dodaj SSR z hydracją
Dział zatytułowany „Dodaj SSR z hydracją”ng add @angular/ssr generuje serwer oparty na AngularNodeAppEngine i trasy serwerowe z RenderMode dla każdej ścieżki. Hydrację daje provideClientHydration(), które w 22.x samo włącza hydrację przyrostową i transfer cache dla HttpClient; dokładasz tylko opcję withEventReplay(). withIncrementalHydration() jest przestarzałe od 22.0, a dzięki transfer cache odpowiedzi pobrane podczas renderowania na serwerze są używane ponownie w przeglądarce. Nie proś więc agenta o ręczny kod TransferState dla zwykłych wywołań HttpClient.
Zmigruj starszą aplikację do zoneless i OnPush
Dział zatytułowany „Zmigruj starszą aplikację do zoneless i OnPush”W tym przepisie serwer MCP Angular CLI naprawdę się przydaje: jego narzędzie onpush_zoneless_migration analizuje plik pod kątem wzorców zależnych od Zone.js i zwraca plan migracji, który agent potem wykonuje. Migruj po jednym folderze funkcji.
Zamrożenie asercji sprawia, że wynik można przyjąć bez czytania każdej linii: istniejące testy są specyfikacją, a agentowi nie wolno ich ruszać. Ogólny wzorzec opisuje tekst chroń wyrocznię testów, a kolejność większej migracji — modernizacja starszego kodu.
Podziel aplikację-powłokę na mikrofrontendy z Native Federation
Dział zatytułowany „Podziel aplikację-powłokę na mikrofrontendy z Native Federation”Domyślny builder application w CLI działa na esbuild. @angular-architects/module-federation celuje w webpack, więc aktualna aplikacja z domyślnym builderem używa zamiast niego @angular-architects/native-federation, który deleguje pracę do buildera aplikacji na esbuild.
Zanim podzielisz aplikację, upewnij się, że potrzebujesz niezależnych wdrożeń. Mikrofrontendy wymieniają prostotę buildu na autonomię zespołów, a kompromisy mikroserwisów dotyczą też frontendu.
Buduj dyrektywy z obiektem host
Dział zatytułowany „Buduj dyrektywy z obiektem host”Jak sprawdzić kod Angular od agenta bez czytania każdej linii
Dział zatytułowany „Jak sprawdzić kod Angular od agenta bez czytania każdej linii”Każda bramka odpowiada na jedno pytanie, a razem zastępują czytanie kodu linia po linii. Build i testy agent uruchamia przed zakończeniem pracy; CI uruchamia wszystkie.
| Bramka | Polecenie | Czego dowodzi |
|---|---|---|
| Build ze sprawdzaniem typów w szablonach | npx ng build | Szablony wiążą się z istniejącymi inputami i outputami, importy są kompletne, budżety się mieszczą (angular.json → budgets) |
| Testy jednostkowe i komponentów | npx ng test --watch=false | Zachowanie przez DOM, w Viteście, bez podpórki w postaci Zone.js |
| Lint | npx ng lint po npx ng add angular-eslint | Reguły TypeScript i szablonów specyficzne dla Angulara, w tym konfiguracja template-accessibility |
| End-to-end | npx playwright test | Prawdziwy routing, leniwe chunki, hydracja i formularze w przeglądarce. Zobacz testy end-to-end z agentami i Playwright MCP |
| Dostępność | Sprawdzenia Axe w pakiecie Playwright, po npm i -D @axe-core/playwright (4.13.0 na 2026-09-26) | WCAG AA, którego wymagają oficjalne instrukcje Angulara dla AI. Zobacz testy dostępności |
Dwie decyzje wciąż należą do ciebie: czy kryteria akceptacji w prompcie są właściwe i czy żadna asercja nie została osłabiona, żeby dojść do zielonego wyniku. Zmianę zatwierdza recenzent, który czyta diff specyfikacji i wynik bramek, a nie diff implementacji. Wyniki dołącz do pull requesta zgodnie z opisem pakietu dowodów.
Kiedy kod Angular od agenta się psuje
Dział zatytułowany „Kiedy kod Angular od agenta się psuje”| Objaw | Przyczyna | Co zrobić |
|---|---|---|
| Widok nie odświeża się po kliknięciu lub odpowiedzi HTTP | Zwykłe pole zmienione w aplikacji zoneless z OnPush | Poproś agenta o przeniesienie stanu szablonu do sygnałów. Nie przywracaj zone.js, żeby to ukryć |
fakeAsync rzuca „zone-testing.js is needed for the fakeAsync() test helper” | Spec z czasów Zone.js uruchamiany pod Vitestem w aplikacji zoneless | Przepisz spec na vi.useFakeTimers() lub await fixture.whenStable() |
ng build kończy się błędem „is not a known element”, „Can’t bind to … since it isn’t a known property” albo „No pipe found with name” | W imports komponentu standalone brakuje komponentu, pipe’a albo dyrektywy użytej przez wiązanie właściwości | Każ agentowi uruchomić ng build przed zakończeniem pracy i naprawić każdy błąd; ten przypadek nie przejdzie na zielono |
| Dyrektywa atrybutowa po cichu nic nie robi, a build nie zgłasza błędu | Dyrektywy brakuje w imports, a szablon używa jej tylko jako zwykłego atrybutu albo wiązania zdarzenia, np. (clickOutside), które Angular kompiluje jako zwykły atrybut lub listener DOM | Wymagaj specu, który sprawdza efekt dyrektywy (np. że output się emituje), i sprawdź tablicę imports w diffie |
Dane z resolvera lub parametry trasy przychodzą jako inputy undefined | W provideRouter brakuje withComponentInputBinding() | Dodaj je raz w app.config.ts |
ReferenceError: window is not defined podczas SSR | API przeglądarki odczytywane w konstruktorze | Przenieś kod do afterNextRender() albo do serwisu chronionego sprawdzeniem platformy |
Agent instaluje @angular-architects/module-federation w aplikacji na esbuild | Dane treningowe z czasów webpacka | Przejdź na Native Federation albo świadomie zostań przy webpacku i zapisz to w pliku kontekstu |
| Pamięć rośnie przy długich sesjach | subscribe() bez takeUntilDestroyed() albo nigdy nierozłączony observer | Przeszukaj diff pod kątem subscribe( i wymagaj testu zniszczenia dla każdego trafienia |
Jeśli agent uparcie powtarza ten sam błędny wzorzec, popraw plik kontekstu, a nie prompt: dopisz regułę do sekcji repozytorium w CLAUDE.md lub AGENTS.md albo do reguły w Cursorze, żeby kolejna sesja od razu zaczynała poprawnie.
Co dalej z Angularem i agentami
Dział zatytułowany „Co dalej z Angularem i agentami”- Przegląd przepisów frontendowych dla pozostałych frameworków
- Przepisy na React, żeby porównać te same zadania w React
- Wzorce tworzenia API dla backendu, z którego korzysta twoja aplikacja Angular
- Testy jednostkowe z agentami, czyli specy, które padają z właściwego powodu
- Kryteria akceptacji dla agentów, czyli jak zamienić ticket w kryteria, którymi kończą się te prompty
Czy ten artykuł Ci pomógł?
Jedno kliknięcie, bez logowania.
Co z tym zrobisz?
Jak się czytało?
Co przeszkadzało? Możesz zaznaczyć kilka
Twoja rola?
Dzięki. Czytam każdą odpowiedź. Michał Jaskólski
Pomógł Ci ten artykuł?
Każde to jedno kliknięcie. Zamknij, kiedy chcesz.
bez logowania