In dit artikel zullen we bekijken wat Angular CLI is, wat het voor u kan doen en hoe het een deel van zijn magie achter de schermen uitvoert. Zelfs als u Angular CLI al gebruikt, kan dit artikel als referentie dienen om de interne werking ervan beter te begrijpen.
Technisch gezien hoeft u Angular CLI niet te gebruiken om een Angular-toepassing te ontwikkelen, maar de vele functies kunnen de kwaliteit van uw code sterk verbeteren en u onderweg veel tijd besparen.
Leer je liever Angular aan de hand van een stapsgewijze videocursus? Bekijk Leer Angular 5 op SitePoint Premium.
Dit is het voorlopige artikel in een 4-delige serie over het schrijven van een Todo-applicatie in Angular.
- Deel 0 — De ultieme Angular CLI-referentiegids
- Deel 1 — Onze eerste versie van de Todo-applicatie in gebruik nemen
- Deel 2 — Afzonderlijke componenten maken om een lijst met taken en een enkele taak weer te geven
- Deel 3 — Update de Todo-service om te communiceren met een REST API
- Deel 4 — Gebruik een Angular-router om gegevens op te lossen.
Een stukje geschiedenis
Op 15 september 2016 werd Angular Final uitgebracht.
Waar AngularJS 1.x beperkt was tot een framework, is Angular uitgegroeid tot een ambitieus platform waarmee je snelle en schaalbare applicaties kunt ontwikkelen op alle platforms, zoals web, mobiel internet, native mobiel en zelfs native desktop.
Met deze overgang naar een platform is tooling belangrijker dan ooit geworden. Het opzetten en configureren van tooling is echter niet altijd eenvoudig. Om ervoor te zorgen dat Angular-ontwikkelaars zich kunnen concentreren op het bouwen van applicaties met zo min mogelijk wrijving, doet het Angular-team veel moeite om ontwikkelaars een hoogwaardige ontwikkelingstoolset te bieden.
Onderdeel van die toolset zijn nauwe integraties met een breed scala aan IDE's en editors. Een ander onderdeel van die toolset is Angular CLI.
Dus laten we beginnen!
25.04.2017: Op 24 maart werd Angular CLI v1.0 uitgebracht. Dit artikel is bijgewerkt om de laatste wijzigingen weer te geven. Als je de nieuwste functies van Angular CLI v1.0 wilt toevoegen aan je bestaande Angular-project dat is gegenereerd met een eerdere versie van Angular CLI, bekijk dan de Angular CLI v1.0-migratiegids.
2017.02.17: Vanaf 9 februari 2017 is de ng deploy
commando is verwijderd uit de kern van Angular CLI. Lees hier meer.
27.01.2017: Vanaf 27 januari 2017 is de officiële aanbeveling om de naam AngularJS te gebruiken voor elke 1.x-release en de naam Angular voor elke 2+ release. Dit artikel is bijgewerkt om de officiële richtlijnen voor branding weer te geven.
Wat is Angular CLI?
Angular CLI is een opdrachtregelinterface (CLI) om uw ontwikkelworkflow te automatiseren. Hiermee kunt u:
- maak een nieuwe Angular-applicatie
- voer een ontwikkelserver uit met LiveReload-ondersteuning om een voorbeeld van uw applicatie te bekijken tijdens de ontwikkeling
- functies toevoegen aan uw bestaande Angular-applicatie
- voer de unit-tests van uw applicatie uit
- voer de end-to-end (E2E) tests van uw toepassing uit
- bouw uw applicatie voor implementatie naar productie.
Voordat we elk van de bovenstaande in detail bekijken, laten we eerst kijken hoe u Angular CLI kunt installeren.
Vereisten
Voordat u Angular CLI kunt gebruiken, moet u Node.js 6.9.0 en npm 3.0.0 of hoger op uw systeem hebben geïnstalleerd.
U kunt de nieuwste versie van Node.js voor uw besturingssysteem downloaden en de nieuwste installatie-instructies raadplegen op de officiële Node.js-website.
Als je Node.js en npm al hebt geïnstalleerd, kun je hun versie verifiëren door het volgende uit te voeren:
$ node -v # => displays your Node.js version
$ npm -v # => displays your npm version
Zodra je Node.js hebt geïnstalleerd, kun je de npm
. gebruiken commando om TypeScript te installeren:
$ npm install -g [email protected]
Hoewel TypeScript technisch gezien geen absolute vereiste is, wordt het sterk aanbevolen door het Angular-team, dus ik raad u aan het te installeren om het werken met Angular zo comfortabel mogelijk te maken.
Nu je Node.js en TypeScript hebt geïnstalleerd, kun je Angular CLI installeren.
Hoekige CLI installeren
Om Angular CLI te installeren, voer je uit:
$ npm install -g @angular/cli
Hiermee wordt de ng
. geïnstalleerd commando globaal op uw systeem.
Om te controleren of uw installatie met succes is voltooid, kunt u dit uitvoeren:
$ ng version
Dit toont de versie die u hebt geïnstalleerd:
@angular/cli: 1.0.0
node: 6.10.0
os: darwin x64
Nu je Angular CLI hebt geïnstalleerd, gaan we het gebruiken om een nieuwe applicatie te maken.
Een nieuwe hoekapplicatie maken
Er zijn twee manieren om een nieuwe applicatie te maken met Angular CLI:
ng init
:maak een nieuwe applicatie in de huidige mapng new
:maak een nieuwe map en voerng init
uit in de nieuwe map.
Dus ng new
lijkt op ng init
, behalve dat het ook een map voor u aanmaakt.
Ervan uitgaande dat u nog geen directory heeft aangemaakt, gebruiken we ng new
om een nieuw project aan te maken:
$ ng new my-app
Achter de schermen gebeurt het volgende:
- een nieuwe map
my-app
is gemaakt - alle bronbestanden en mappen voor uw nieuwe Angular-toepassing worden gemaakt op basis van de naam die u hebt opgegeven (
my-app
) en best-practices uit de officiële Angular Style Guide - npm-afhankelijkheden zijn geïnstalleerd
- TypeScript is voor u geconfigureerd
- de Karma unit-testrunner is voor u geconfigureerd
- het Protractor end-to-end testframework is voor u geconfigureerd
- omgevingsbestanden met standaardinstellingen worden aangemaakt.
In de volgende secties leert u meer over elk van deze aspecten.
Op dit moment heb je een werkende Angular-applicatie en je nieuwe directory my-app
ziet er zo uit:
.
├── README.md
├── e2e
│ ├── app.e2e-spec.ts
│ ├── app.po.ts
│ └── tsconfig.e2e.json
├── karma.conf.js
├── package.json
├── protractor.conf.js
├── src
│ ├── app
│ │ ├── app.component.css
│ │ ├── app.component.html
│ │ ├── app.component.spec.ts
│ │ ├── app.component.ts
│ │ └── app.module.ts
│ ├── assets
│ ├── environments
│ │ ├── environment.prod.ts
│ │ └── environment.ts
│ ├── favicon.ico
│ ├── index.html
│ ├── main.ts
│ ├── polyfills.ts
│ ├── styles.css
│ ├── test.ts
│ ├── tsconfig.app.json
│ ├── tsconfig.spec.json
│ └── typings.d.ts
├── tsconfig.json
└── tslint.json
Beschikbare opties
--dry-run
:boolean, standaardfalse
, voer een droge run uit zodat er geen wijzigingen naar het bestandssysteem worden geschreven--verbose
:boolean, standaardfalse
--link-cli
:boolean, standaardfalse
, koppel automatisch de@angular/cli
pakket (meer info)--skip-install
:boolean, standaardfalse
, slanpm install
over--skip-git
:boolean, standaardfalse
, initialiseer git repository niet--skip-tests
:boolean, standaardfalse
, sla het maken van tests over--skip-commit
:boolean, standaardfalse
, sla het committen van de eerste git commit over--directory
:string, naam van de aan te maken directory, standaard is dit hetzelfde als de applicatienaam--source-dir
:string, standaard'src'
, naam van de bronmap--style
:string, standaard'css'
, de te gebruiken stijltaal ('css'
,'less'
of'scss'
)--prefix
:string, standaard'app'
, het voorvoegsel dat moet worden gebruikt bij het genereren van nieuwe componenten--mobile
:boolean, standaardfalse
, genereer een Progressive Web App-toepassing (zie het gedeelte over aankomende functies)--routing
:boolean, standaardfalse
, voeg module toe met routeringsinformatie en importeer deze in de hoofdapp-module--inline-style
:boolean, standaardfalse
, gebruik inline stijlen bij het genereren van de nieuwe applicatie--inline-template
:boolean, standaardfalse
, gebruik inline sjablonen bij het genereren van de nieuwe applicatie.
Voer $ ng generate --help
uit om alle beschikbare opties van uw lokaal geïnstalleerde Angular CLI te zien.
Laten we eens kijken hoe u uw applicatie kunt starten, zodat u deze in actie kunt zien.
Uw toepassing uitvoeren
Om een voorbeeld van uw nieuwe toepassing in uw browser te bekijken, navigeert u naar de map:
$ cd my-app
en ren:
$ ng serve
om de ingebouwde ontwikkelserver op poort 4200 te starten:
** NG Live Development Server is running on http://localhost:4200 **
Hash: 09fb2ad840c1472e5885
Time: 6230ms
chunk {0} polyfills.bundle.js, polyfills.bundle.js.map (polyfills) 158 kB {4} [initial] [rendered]
chunk {1} main.bundle.js, main.bundle.js.map (main) 3.62 kB {3} [initial] [rendered]
chunk {2} styles.bundle.js, styles.bundle.js.map (styles) 9.77 kB {4} [initial] [rendered]
chunk {3} vendor.bundle.js, vendor.bundle.js.map (vendor) 2.37 MB [initial] [rendered]
chunk {4} inline.bundle.js, inline.bundle.js.map (inline) 0 bytes [entry] [rendered]
webpack: Compiled successfully.
U kunt nu in uw favoriete browser navigeren naar http://localhost:4200/ om uw applicatie in actie te zien:
Achter de schermen gebeurt het volgende:
- Angular CLI laadt de configuratie van
.angular-cli.json
- Angular CLI voert Webpack uit om alle JavaScript- en CSS-code te bouwen en te bundelen
- Angular CLI start Webpack dev-server om een voorbeeld van het resultaat te zien op
localhost:4200
.
Merk op dat de ng serve
commando wordt niet afgesloten en keert terug naar uw terminalprompt na stap 3.
In plaats daarvan houdt het proces, omdat het LiveReload-ondersteuning bevat, actief uw src
. in de gaten map voor bestandswijzigingen. Wanneer een bestandswijziging wordt gedetecteerd, wordt stap 2 herhaald en wordt er een melding naar uw browser gestuurd zodat deze automatisch kan worden vernieuwd.
Om het proces te stoppen en terug te keren naar uw prompt, drukt u op ctrl-c
.
Functies toevoegen aan uw hoekapplicatie
U kunt de ng generate
. gebruiken commando om functies toe te voegen aan uw bestaande applicatie:
ng generate class my-new-class
:voeg een klas toe aan je applicatieng generate component my-new-component
:voeg een component toe aan uw applicatieng generate directive my-new-directive
:voeg een richtlijn toe aan je applicatieng generate enum my-new-enum
:voeg een opsomming toe aan uw aanvraagng generate module my-new-module
:een module toevoegen aan uw applicatieng generate pipe my-new-pipe
:voeg een pijp toe aan je applicatieng generate service my-new-service
:een dienst toevoegen aan uw applicatie
De generate
commando en de verschillende subcommando's hebben ook sneltoetsen, dus de volgende commando's lijken op elkaar:
ng g cl my-new-class
:voeg een klas toe aan je applicatieng g c my-new-component
:voeg een component toe aan uw applicatieng g d my-new-directive
:voeg een richtlijn toe aan je applicatieng g e my-new-enum
:voeg een opsomming toe aan uw aanvraagng g m my-new-module
:een module toevoegen aan uw applicatieng g p my-new-pipe
:voeg een pijp toe aan je applicatieng g s my-new-service
:een dienst aan uw applicatie toevoegen.
Elk van de verschillende subcommando's voert een andere taak uit en biedt verschillende opties en parameters.
Laten we ze allemaal eens bekijken.
Een nieuwe klas toevoegen
Een klas toevoegen met de naam UserProfile
, rennen:
$ ng generate class user-profile
installing component
create src/app/user-profile.ts
Angular CLI past automatisch de hoofdletters van de bestandsnaam en klassenaam voor u aan, zodat de volgende opdrachten hetzelfde effect hebben:
# All three commands are equivalent
$ ng generate class user-profile
$ ng generate class userProfile
$ ng generate class UserProfile
Achter de schermen gebeurt het volgende:
- een bestand
src/app/user-profile.ts
is gemaakt die een lege klasse exporteert met de naamUserProfile
Beschikbare opties
--spec
:boolean, standaardfalse
, genereer specificatiebestand met eenheidstest
Voer $ ng generate --help
uit om alle beschikbare opties van uw lokaal geïnstalleerde Angular CLI te zien.
Voorbeelden:
# Generate class 'UserProfile'
$ ng generate class user-profile
# Generate class 'UserProfile' with unit test
$ ng generate class user-profile --spec
Een nieuwe component toevoegen
Een component toevoegen met een selector app-site-header
, rennen:
$ ng generate component site-header
installing component
create src/app/site-header/site-header.component.css
create src/app/site-header/site-header.component.html
create src/app/site-header/site-header.component.spec.ts
create src/app/site-header/site-header.component.ts
update src/app/app.module.ts
Angular CLI past automatisch de hoofdletters van de bestandsnaam en componentnaam voor u aan en past het voorvoegsel toe op de componentkiezer, zodat de volgende opdrachten hetzelfde effect hebben:
# All three commands are equivalent
$ ng generate component site-header
$ ng generate component siteHeader
$ ng generate component SiteHeader
Achter de schermen gebeurt het volgende:
- een map
src/app/site-header
is gemaakt - in die map worden vier bestanden gegenereerd:
- een CSS-bestand voor de componentstijlen
- een HTML-bestand voor de componentsjabloon
- een TypeScript-bestand met een componentklasse met de naam
SiteHeaderComponent
en selectorapp-site-header
- een specificatiebestand met een voorbeeldeenheidstest voor uw nieuwe component
SiteHeaderComponent
wordt toegevoegd als een verklaring in de@NgModule
decorateur van de dichtstbijzijnde module, in dit geval deAppModule
insrc/app/app.module.ts
.
Beschikbare opties
--flat
:boolean, standaardfalse
, genereer componentbestanden insrc/app
in plaats vansrc/app/site-header
--inline-template
:boolean, standaardfalse
, gebruik een inline-sjabloon in plaats van een apart HTML-bestand--inline-style
:boolean, standaardfalse
, gebruik inline stijlen in plaats van een apart CSS-bestand--prefix
:boolean, standaardtrue
, gebruik het voorvoegsel gespecificeerd in.angular-cli.json
in componentkiezer--spec
:boolean, standaardtrue
, genereer specificatiebestand met eenheidstest--view-encapsulation
:string, specificeert de strategie voor het inkapselen van de weergave--change-detection
:string, specificeert de wijzigingsdetectiestrategie.
Voer $ ng generate --help
uit om alle beschikbare opties van uw lokaal geïnstalleerde Angular CLI te zien.
Voorbeelden:
# Generate component 'site-header'
$ ng generate component site-header
# Generate component 'site-header' with inline template and inline styles
$ ng generate component site-header --inline-template --inline-style
Een nieuwe richtlijn toevoegen
Een richtlijn toevoegen met een selector appAdminLink
, rennen:
$ ng generate directive admin-link
installing directive
create src/app/admin-link.directive.spec.ts
create src/app/admin-link.directive.ts
update src/app/app.module.ts
Angular CLI past automatisch de hoofdletter van de bestandsnaam en de instructienaam voor u aan en past het voorvoegsel toe op de richtlijnselector, zodat de volgende opdrachten hetzelfde effect hebben:
# All three commands are equivalent
$ ng generate directive admin-link
$ ng generate directive adminLink
$ ng generate directive AdminLink
Achter de schermen gebeurt het volgende:
- een bestand
src/app/admin-link.directive.ts
is gemaakt die een richtlijn exporteert met de naamAdminLinkDirective
met een selectorappAdminLink
- een bestand
src/app/admin-link.directive.spec.ts
is gemaakt met een eenheidstest voor de richtlijn AdminLinkDirective
wordt toegevoegd als een verklaring in de@NgModule
decorateur van de dichtstbijzijnde module, in dit geval deAppModule
insrc/app/app.module.ts
.
Beschikbare opties
--flat
:boolean, standaardtrue
, genereer instructiebestanden insrc/app
in plaats vansrc/app/admin-link
--prefix
:boolean, standaardtrue
, gebruik het voorvoegsel gespecificeerd in.angular-cli.json
in richtlijn selector--spec
:boolean, standaardtrue
, genereer specificatiebestand met eenheidstest
Voer $ ng generate --help
uit om alle beschikbare opties van uw lokaal geïnstalleerde Angular CLI te zien.
Voorbeelden:
# Generate directive 'adminLink'
$ ng generate directive admin-link
# Generate directive 'adminLink' without unit test
$ ng generate directive admin-link --spec=false
Een nieuwe opsomming toevoegen
Een opsomming toevoegen met de naam Direction
, rennen:
$ ng generate enum direction
installing enum
create src/app/direction.enum.ts
Angular CLI past automatisch de hoofdletters van de bestandsnaam en de opsommingsnaam voor u aan, zodat de volgende opdrachten hetzelfde effect hebben:
# Both commands are equivalent
$ ng generate enum direction
$ ng generate enum Direction
Achter de schermen gebeurt het volgende:
- een bestand
src/app/direction.enum.ts
is gemaakt die een opsomming exporteert met de naamDirection
Beschikbare opties
Er zijn geen opdrachtregelopties beschikbaar voor deze opdracht.
Een nieuwe module toevoegen
Om een nieuwe module aan uw applicatie toe te voegen, voert u het volgende uit:
$ ng generate module admin
installing module
create src/app/admin/admin.module.ts
Achter de schermen gebeurt het volgende:
- een map
src/app/admin
is gemaakt - een
AdminModule
module is gemaakt insrc/app/admin/admin.module.ts
.
Merk op dat de AdminModule
module wordt niet automatisch toegevoegd aan je hoofdmodule AppModule
in src/app/app.module.ts
. Het is aan jou om de module te importeren waar je hem nodig hebt.
Om uw nieuwe module in een andere module te importeren, kunt u specificeren is als een import in een @NgModule
definitie. Bijvoorbeeld:
import { AdminModule } from './admin/admin.module';
@NgModule({
// ...
imports: [
AdminModule
]
})
export class AppModule { }
Beschikbare opties
--routing
:boolean, standaardfalse
, genereer een extra moduleAdminRoutingModule
met alleen de routeringsinformatie en voeg deze toe als import aan uw nieuwe module--spec
:boolean, standaardfalse
, voegsrc/app/admin/admin.module.spec.ts
toe met een eenheidstest die controleert of de module bestaat.
Voer $ ng generate --help
uit om alle beschikbare opties van uw lokaal geïnstalleerde Angular CLI te zien.
Voorbeelden:
# Add module 'admin'
$ ng generate module admin
# Add module 'admin' with additional module containing routing information
$ ng generate module admin --routing
Een nieuwe pijp toevoegen
Een pijp is het Angular-equivalent van een filter in AngularJS 1.x en stelt u in staat een weergegeven waarde binnen een sjabloon te transformeren.
Een pijp toevoegen met een naam convertToEuro
, rennen:
$ ng generate pipe convert-to-euro
installing pipe
create src/app/convert-to-euro.pipe.spec.ts
create src/app/convert-to-euro.pipe.ts
update src/app/app.module.ts
Angular CLI past automatisch de hoofdletters van de bestandsnaam en de naam van de pijp voor u aan, zodat de volgende opdrachten hetzelfde effect hebben:
# All three commands are equivalent
$ ng generate pipe convert-to-euro
$ ng generate pipe convertToEuro
$ ng generate pipe ConvertToEuro
Achter de schermen gebeurt het volgende:
- een bestand
src/app/convert-to-euro.pipe.ts
is gemaakt die een pipe-klasse exporteert met de naamConvertToEuroPipe
- een bestand
src/app/convert-to-euro.pipe.spec.ts
is gemaakt met een eenheidstest voor de pijp ConvertToEuroPipe
wordt toegevoegd als een aangifte in de@NgModule
decorateur van de dichtstbijzijnde module, in dit geval deAppModule
insrc/app/app.module.ts
.
Beschikbare opties
--flat
:boolean, standaardtrue
, genereer componentbestanden insrc/app
in plaats vansrc/app/site-header
--spec
:boolean, standaardtrue
, genereer specificatiebestand met eenheidstest.
Voer $ ng generate --help
uit om alle beschikbare opties van uw lokaal geïnstalleerde Angular CLI te zien.
Voorbeelden:
# Generate pipe 'convertToEuro' with spec and in /src/app directory
$ ng generate pipe convert-to-euro
# Generate pipe 'convertToEuro' without spec and in /src/app/convert-to-euro directory
$ ng generate pipe convert-to-euro --spec=false --flat=false
Een nieuwe service toevoegen
Een service toevoegen met een afhankelijkheidsinjectietoken BackendApiService
, rennen:
$ ng generate service backend-api
installing service
create src/app/backend-api.service.spec.ts
create src/app/backend-api.service.ts
WARNING Service is generated but not provided, it must be provided to be used
Angular CLI past automatisch de hoofdletters van de bestandsnaam en de naam van de pijp voor u aan, zodat de volgende opdrachten hetzelfde effect hebben:
# All three commands are equivalent
$ ng generate service backend-api
$ ng generate service backendApi
$ ng generate service BackendApi
Achter de schermen gebeurt het volgende:
- een bestand
src/app/backend-api.service.ts
is gemaakt die een serviceklasse exporteert met de naamBackendApiService
- een bestand
src/app/backend-api.service.spec.ts
is gemaakt met een eenheidstest voor uw nieuwe service.
Merk op hoe Angular CLI waarschuwt dat de service is gegenereerd maar nog nergens wordt aangeboden. Het is aan jou om de dienst als aanbieder te registreren door deze toe te voegen aan de providers: []
array waar je het nodig hebt (bijvoorbeeld in een module of component). Bijvoorbeeld:
import { BackendApiService } from './backend-api.service';
@NgModule({
// ...
providers: [BackendApiService],
bootstrap: [AppComponent]
})
Beschikbare opties
--flat
:boolean, standaardtrue
, genereer servicebestand insrc/app
in plaats vansrc/app/backend-api
--spec
:boolean, standaardtrue
, genereer specificatiebestand met eenheidstest
Voer $ ng generate --help
uit om alle beschikbare opties van uw lokaal geïnstalleerde Angular CLI te zien.
Voorbeelden:
# Generate service with DI token 'BackendApiService' in /src/app directory
$ ng generate service backend-api
# Generate service with DI token 'BackendApiService' in /src/app/backend-api directory
$ ng generate service backend-api --flat=false
Speciale opmerking
Angular CLI genereert niet zomaar code voor u. Het maakt gebruik van statische analyse om de semantiek van uw toepassing beter te begrijpen.
Als u bijvoorbeeld een nieuw onderdeel toevoegt met ng generate component
, Angular CLI vindt de dichtstbijzijnde module in de modulestructuur van uw toepassing en integreert de nieuwe functie in die module.
Dus als je een applicatie met meerdere modules hebt, zal Angular CLI de nieuwe functie automatisch in de juiste module integreren, afhankelijk van de map waar je de opdracht vandaan haalt.
Uw eenheidstests uitvoeren
Angular CLI configureert automatisch de Karma-testrunner voor u wanneer uw toepassing voor het eerst wordt gemaakt.
Wanneer u een functie aan uw applicatie toevoegt, kunt u de --spec
. gebruiken optie om aan te geven of u wilt dat Angular CLI ook een corresponderende .spec.ts
. maakt bestand met een voorbeeldeenheidstest voor uw nieuwe functie.
Spec-bestanden worden gemaakt in dezelfde map van hun overeenkomstige functie in de src
map. Hierdoor kunt u ze gemakkelijk vinden wanneer u aan een functie werkt.
Het uitvoeren van alle unit-tests van uw applicatie impliceert dus het uitvoeren van alle unit-tests gespecificeerd in alle bestanden die eindigen op .spec.ts
in alle mappen in uw src
directory.
Om alle eenheidstests uit te voeren, voer je uit:
$ ng test
De volgende uitvoer verschijnt in uw console:
$ ng test
[karma]: No captured browser, open http://localhost:9876/
[karma]: Karma v1.4.1 server started at http://0.0.0.0:9876/
[launcher]: Launching browser Chrome with unlimited concurrency
[launcher]: Starting browser Chrome
[Chrome 57.0.2987 (Mac OS X 10.12.0)]: Connected on socket 4OBzlsVyIPZyE1AYAAAA with id 41455596
Chrome 57.0.2987 (Mac OS X 10.12.0): Executed 3 of 3 SUCCESS (0.132 secs / 0.121 secs)
Er wordt ook een speciale browserinstantie gelanceerd:
Dit is wat er achter de schermen gebeurt:
- Angular CLI laadt
.angular-cli.json
. - Angular CLI voert Karma uit met de configuratie gespecificeerd in
.angular-cli.json
. Standaard is ditkarma.conf.js
bevindt zich in de hoofdmap van uw toepassing. - Karma opent de browser die is opgegeven in de Karma-configuratie. De browser is standaard ingesteld op Google Chrome.
- Karma geeft vervolgens de browser (Chrome) de opdracht om
src/test.ts
uit te voeren met behulp van het testraamwerk dat is gespecificeerd in de Karma-configuratie. Standaard is dit het Jasmine-framework. Het bestandsrc/test.ts
wordt automatisch gemaakt wanneer uw toepassing wordt gemaakt. Het is vooraf geconfigureerd om de code te laden en te configureren die nodig is om uw Angular-toepassing te testen en alle specificatiebestanden uit te voeren die eindigen op.spec.ts
in jesrc
directory. - Karma rapporteert het resultaat van de testrun aan de console.
- Karma kijkt naar de
src
bestand voor wijzigingen en herhaalt stap 4 en 5 wanneer een bestandswijziging wordt gedetecteerd.
Om het proces te beëindigen, kunt u op ctrl-c
. drukken .
Als je meer wilt weten over het testen van je Angular-code, kun je de Official Angular Testing Guide raadplegen.
Uw end-to-end (E2E) tests uitvoeren
Angular CLI configureert Protractor automatisch voor u wanneer uw toepassing voor het eerst wordt gemaakt.
Voer het volgende uit om uw E2E-tests uit te voeren:
$ ng e2e
De volgende uitvoer verschijnt in uw console:
** NG Live Development Server is running on http://localhost:49152 **
Hash: e570d23ac26086496e1d
Time: 6087ms
chunk {0} polyfills.bundle.js, polyfills.bundle.js.map (polyfills) 158 kB {4} [initial] [rendered]
chunk {1} main.bundle.js, main.bundle.js.map (main) 3.62 kB {3} [initial] [rendered]
chunk {2} styles.bundle.js, styles.bundle.js.map (styles) 9.77 kB {4} [initial] [rendered]
chunk {3} vendor.bundle.js, vendor.bundle.js.map (vendor) 2.37 MB [initial] [rendered]
chunk {4} inline.bundle.js, inline.bundle.js.map (inline) 0 bytes [entry] [rendered]
webpack: Compiled successfully.
I/file_manager - creating folder /Users/jvandemo/Projects/test/my-app/node_modules/protractor/node_modules/webdriver-manager/selenium
I/downloader - curl -o /Users/jvandemo/Projects/test/my-app/node_modules/protractor/node_modules/webdriver-manager/selenium/chromedriver_2.29.zip https://chromedriver.storage.googleapis.com/2.29/chromedriver_mac64.zip
I/update - chromedriver: unzipping chromedriver_2.29.zip
I/update - chromedriver: setting permissions to 0755 for /Users/jvandemo/Projects/test/my-app/node_modules/protractor/node_modules/webdriver-manager/selenium/chromedriver_2.29
I/launcher - Running 1 instances of WebDriver
I/direct - Using ChromeDriver directly...
Spec started
my-app App
✓ should display message saying app works
Executed 1 of 1 spec SUCCESS in 0.523 sec.
I/launcher - 0 instance(s) of WebDriver still running
I/launcher - chrome #01 passed
Er wordt ook een speciale browserinstantie gelanceerd:
Dit is wat er achter de schermen gebeurt:
- Angular CLI laadt
.angular-cli.json
. - Angular CLI voert Protractor uit met de configuratie gespecificeerd in
.angular-cli.json
. Standaard is dit deprotractor.conf.js
bestand dat zich in de hoofdmap van uw toepassing bevindt. - Protractor opent de browser die is opgegeven in de Gradenboogconfiguratie. De browser is standaard ingesteld op Google Chrome.
- Protractor geeft vervolgens de browser (Chrome) de opdracht om alle spec-bestanden uit te voeren die eindigen op
.e2e-spec.ts
in jee2e
directory. - Protractor rapporteert het resultaat van de testrun aan de console.
Het proces wordt dan automatisch afgesloten na stap 5.
Als je meer wilt weten over het E2E-testen van je Angular-code, kun je de Official Angular Testing Guide en de gradenboogdocumentatie raadplegen.
Uw applicatie voor productie bouwen
Draait ng serve
bouwt en bundelt uw Angular-applicatie tijdens de ontwikkeling automatisch naar een virtueel bestandssysteem.
Wanneer uw toepassing echter gereed is voor productie, heeft u echte bestanden nodig die u op uw server of in de cloud kunt implementeren.
Voer het volgende uit om uw toepassing te bouwen en te bundelen voor implementatie:
$ ng build
De uitvoer van het commando wordt naar je console gestuurd:
Hash: 59aaa9ef8eac5d46cdf8
Time: 5433ms
chunk {0} polyfills.bundle.js, polyfills.bundle.js.map (polyfills) 158 kB {4} [initial] [rendered]
chunk {1} main.bundle.js, main.bundle.js.map (main) 3.61 kB {3} [initial] [rendered]
chunk {2} styles.bundle.js, styles.bundle.js.map (styles) 9.77 kB {4} [initial] [rendered]
chunk {3} vendor.bundle.js, vendor.bundle.js.map (vendor) 2.07 MB [initial] [rendered]
chunk {4} inline.bundle.js, inline.bundle.js.map (inline) 0 bytes [entry] [rendered]
Dit is wat er achter de schermen gebeurt:
- Angular CLI laadt de configuratie van
.angular-cli.json
. - Angular CLI voert Webpack uit om alle JavaScript- en CSS-code te bouwen en te bundelen.
- Het resultaat wordt geschreven naar de
outDir
directory opgegeven in uw Angular CLI-configuratie. Standaard is dit dedist
directory.
Beschikbare opties
--aot
:compilatie vooraf inschakelen--base-href
:string, de base href om te gebruiken in het indexbestand--environment
:string, standaarddev
, omgeving om te gebruiken--output-path
:string, directory om de uitvoer naar te schrijven--target
:string, standaarddevelopment
, omgeving om te gebruiken--watch
:boolean, standaardfalse
, bekijk bestanden op wijzigingen en herbouw wanneer een wijziging wordt gedetecteerd.
Doelen
Het specificeren van een doel heeft invloed op de manier waarop het bouwproces werkt. De waarde kan een van de volgende zijn:
development
:standaardmodus, code niet verkleinen of lelijker makenproduction
:code verkleinen en lelijker maken.
Uw applicatie bouwen in productiemodus:
$ ng build --target=production
Dit resulteert in bundels die verkleind en lelijk zijn en hashes in hun naam hebben:
Hash: 4dea6adc9ac01de3c11b
Time: 5588ms
chunk {0} polyfills.2d45a4c73c85e24fe474.bundle.js (polyfills) 158 kB {4} [initial] [rendered]
chunk {1} main.a64b48e56248eb808195.bundle.js (main) 20.8 kB {3} [initial] [rendered]
chunk {2} styles.d41d8cd98f00b204e980.bundle.css (styles) 69 bytes {4} [initial] [rendered]
chunk {3} vendor.205c7417e47c580a2c34.bundle.js (vendor) 1.1 MB [initial] [rendered]
chunk {4} inline.310ccba0fff49a724c8f.bundle.js (inline) 0 bytes [entry] [rendered]
Omgevingen
In omgevingen kunt u instellingen opgeven om uw toepassingsgedrag aan te passen.
U kunt uw eigen omgevingen definiëren in de .angular-cli.json
het dossier. De standaard zijn:
source
:gebruik instellingen gedefinieerd inenvironments/environment.ts
dev
:gebruik instellingen gedefinieerd inenvironments/environment.ts
prod
:gebruik instellingen gedefinieerd inenvironments/environment.prod.ts
.
Hier, environments/environment.ts
is gelijk aan:
export const environment = {
production: false
};
En environments/environment.prod.ts
is gelijk aan:
export const environment = {
production: true
};
Het bouwproces gebruikt de dev
standaard omgeving.
Als u een andere omgeving specificeert, zal het bouwproces de corresponderende omgeving gebruiken:
# Uses environments/environment.ts
$ ng build
# Also uses environments/environment.ts
$ ng build --environment=dev
# Uses environments/environment.prod.ts
$ ng build --environment=prod
Zoals je kunt zien in src/main.ts
, u kunt vanuit uw code toegang krijgen tot de omgevingsinstellingen door environments/environment
. te importeren :
import { enableProdMode } from '@angular/core';
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { AppModule } from './app/app.module';
import { environment } from './environments/environment';
if (environment.production) {
enableProdMode();
}
platformBrowserDynamic().bootstrapModule(AppModule);
Het bouwproces zorgt ervoor dat de juiste omgeving wordt geboden wanneer je het importeert.
Uw toepassing implementeren
Vanaf 9 februari 2017 is de ng deploy
commando is verwijderd uit de kern van Angular CLI. Lees hier meer.
Uw aanvraag uitwerpen
Vanaf v1.0 biedt Angular CLI een opdracht om uw toepassing los te koppelen van Angular CLI.
Standaard beheert Angular CLI de onderliggende webpack-configuratie voor u, zodat u niet te maken krijgt met de complexiteit ervan.
Als u op enig moment Webpack handmatig wilt configureren en u Angular CLI niet langer wilt gebruiken met uw Angular-toepassing, kunt u het volgende uitvoeren:
$ ng eject
Dit genereert de volgende uitvoer in uw console:
==========================================================================================
Ejection was successful.
To run your builds, you now need to do the following commands:
- "npm run build" to build.
- "npm run test" to run unit tests.
- "npm start" to serve the app using webpack-dev-server.
- "npm run e2e" to run protractor.
Running the equivalent CLI commands will result in an error.
==========================================================================================
Some packages were added. Please run "npm install".
Dit is wat er achter de schermen gebeurt:
- Een eigenschap
ejected: true
wordt toegevoegd aan de.angular-cli.json
bestand - Een
webpack.config.js
bestand wordt gegenereerd in de hoofdmap van uw toepassing met een stand-alone Webpack-configuratie, zodat u uw project kunt bouwen zonder Angular CLI - De
build
script in uwpackage.json
is bijgewerkt zodat unpm run build
. kunt uitvoeren om uw project te bouwen - De
test
script in uwpackage.json
is bijgewerkt zodat unpm run test
. kunt uitvoeren ofnpm test
om uw eenheidstests uit te voeren - De
start
script in uwpackage.json
is bijgewerkt zodat unpm run start
. kunt uitvoeren ofnpm start
om een ontwikkelserver te starten - De
e2e
script in uwpackage.json
is bijgewerkt zodat unpm run e2e
. kunt uitvoeren om uw end-to-end tests uit te voeren.
Nadat u uw toepassing heeft verwijderd, kunt u de Webpack-configuratie handmatig naar wens bijwerken en werken de Angular CLI-commando's niet meer.
Dus als u, om wat voor reden dan ook, afstand wilt nemen van Angular CLI, kunt u met de uitwerpopdracht terecht.
Een blik in de toekomst
De roadmap van Angular CLI bevat veel opwindende aankomende functies:
- ondersteuning voor progressieve web-app (PWA)
Angular CLI kan een Web Application Manifest voor u maken, een App Shell genereren en Service Worker-scripts leveren om uw applicatiegegevens in de cache op te slaan.
Lees hier meer over mobiele ondersteuning. - Ondersteuning voor refactoring
Naast het toevoegen van functies aan uw toepassing, kunt u met Angular CLI ook bestaande functies aanpassen, bijvoorbeeld door een component te verplaatsen of een service te hernoemen. - Ondersteuning upgraden
Angular CLI kan u helpen met Angular-upgrades. Omdat Angular CLI een semantisch begrip van uw toepassing heeft, kan het u helpen met codewijzigingen die nodig zijn bij het upgraden naar een nieuwere versie van Angular. - Uitbreidbaarheid
Verbeterde ondersteuning voor uitbreidbaarheid, zodat u uw eigen aangepaste add-ons en implementatiescripts kunt maken. - Verhoogde prestaties
Verbeterde prestaties zodat Angular CLI sneller wordt. - Bibliotheekontwikkelaarsmodus
Naast het maken van een nieuwe toepassing, kunt u met Angular CLI ook een nieuwe bibliotheek maken die door anderen kan worden gebruikt.
Sommige van deze functies zijn al gedeeltelijk beschikbaar. Bekijk de GitHub-repository als je ermee wilt spelen.
Samenvatting
Angular CLI is een opdrachtregelinterface (CLI) om uw ontwikkelworkflow te automatiseren.
Tegenwoordig kunt u Angular CLI al gebruiken om:
- maak een nieuwe Angular-applicatie
- voer een ontwikkelserver uit met LiveReload-ondersteuning om een voorbeeld van uw applicatie te bekijken tijdens de ontwikkeling
- functies toevoegen aan uw bestaande Angular-applicatie
- voer de unit-tests van uw toepassing uit
- voer de end-to-end (E2E) tests van uw toepassing uit
- bouw uw applicatie voor implementatie naar productie
- implementeer uw applicatie op een server.
Hoewel het technisch gezien niet vereist is om Angular CLI te gebruiken om een Angular-toepassing te ontwikkelen, kan het zeker de kwaliteit van uw code verbeteren en u veel tijd en moeite besparen.
Vanwege de vele opwindende functies die in de loop van de tijd zullen worden toegevoegd, zal Angular CLI waarschijnlijk een onmisbaar hulpmiddel worden voor het ontwikkelen van Angular-applicaties.
Ga voor meer informatie over Angular CLI naar de officiële website en de GitHub-repository.
De Ultimate Angular CLI-referentiegids is peer-reviewed door Tim Severien, Vildan Softic en Joan Yin. Dank aan alle peer reviewers van SitePoint voor het zo goed mogelijk maken van SitePoint-inhoud!