You are on page 1of 46

ManfredSteyer

Enterprise Angular with Nx:


Sustainable Architectures & Fast Builds
Manfred Steyer, ANGULARarchitects.io

@BASTAcon & @ManfredSteyer


@BASTAcon & @ManfredSteyer
@BASTAcon & @ManfredSteyer
@BASTAcon & @ManfredSteyer
@ManfredSteyer
Manfred Steyer

@ManfredSteyer
@ManfredSteyer
Monorepo
Structure

@ManfredSteyer
Advantages
Everyone uses the latest versions

No version conflicts

Sharing Libs: Easy

@ManfredSteyer
Moving back and forth

Npm Registry

@ManfredSteyer
Two Flavors
Project Monorepo

• Like Workspaces/Solutions in different IDEs

Company-wide Monorepo

• E. g. used at Google or Facebook

@ManfredSteyer
Creating a Workspace with the CLI
npm install -g @angular/cli

ng new workspace

cd workspace

ng generate app my-app


ng generate lib my-lib

ng serve --project my-app


ng build --project my-app

@ManfredSteyer
Tooling & Generator
https://nrwl.io/nx

@ManfredSteyer
Visualize
Module
Structure

@ManfredSteyer
Creating a Workspace with the CLI
npm install -g @angular/cli

ng new workspace

cd workspace

ng generate app my-app


ng generate lib my-lib

ng serve --project my-app


ng build --project my-app

@ManfredSteyer
Creating a Workspace with Nx
npm install -g @angular/cli

npm init nx-workspace myworkspace

cd workspace

ng generate app my-app


ng generate lib my-lib

ng serve --project my-app


ng build --project my-app

@ManfredSteyer
Creating a Workspace with NX
npm install -g @angular/cli

npm init nx-workspace myworkspace

cd workspace

ng generate app my-app


ng generate lib my-lib --directory my-domain

ng serve --project my-app


ng build --project my-app

@ManfredSteyer
DEMO

@ManfredSteyer
@ManfredSteyer
@ManfredSteyer
Tagging Apps and Libs (nx.json)
"booking": {
"tags": ["domain:booking", "type:app"]
},
"booking-feature-search": {
"tags": ["domain:booking", "type:feature"]
},

@ManfredSteyer
Tagging Apps and Libs (nx.json)
"booking": {
"tags": ["domain:booking", "type:app"]
},
"booking-feature-search": {
"tags": ["domain:booking", "type:feature"]
},

@ManfredSteyer
Linting (.eslintrc)
{
"sourceTag": "domain:booking",
"onlyDependOnLibsWithTags":
["domain:booking", "domain:shared"]
}

@ManfredSteyer
DEMO

@ManfredSteyer
@ManfredSteyer
Options

File System

Nx Cloud

Custom Cache

@ManfredSteyer
Configuration (nx.json)
"tasksRunnerOptions": {
"default": {
"runner": "@nrwl/workspace/tasks-runners/default",
[…]
}
},

@ManfredSteyer
Configuration (nx.json)
"tasksRunnerOptions": {
"default": {
"runner": "@nrwl/workspace/tasks-runners/default",
"options": {
"cacheableOperations": ["build", "lint", "test", "e2e"],
[…]
}
}
},

@ManfredSteyer
Using

nx build app-or-lib --with-deps

@ManfredSteyer
Prerequisite for Incremental Builds

ng g lib lib-name --buildable

@ManfredSteyer
DEMO

@ManfredSteyer
Also Test and Lint-Results Can be Cached
nx build app-or-lib --with-deps
nx lint app-or-lib --with-deps
nx test app-or-lib --with-deps
nx e2e app-or-lib --with-deps

@ManfredSteyer
DEMO

@ManfredSteyer
@ManfredSteyer
Nx Console
for Visual
Studio Code

@ManfredSteyer



@ManfredSteyer
@ManfredSteyer
Smart
Comp. Booking Boarding Shared

Dumb Comp.
Feature Feature Feature Feature Feature

UI UI UI UI UI UI UI UI UI

Domain Domain Domain Domain Domain Domain

Util Util Util Util Util Util

@ManfredSteyer @ManfredSteyer
Booking Boarding Shared

Feature Feature Feature Feature Feature

UI UI UI UI UI UI UI UI UI

Domain Domain Domain Domain Domain Domain

Util Util Util Util Util Util

@ManfredSteyer @ManfredSteyer
Automate

@ManfredSteyer
Usage

@ManfredSteyer
DEMO

@ManfredSteyer
Free eBook
ANGULARarchitects.io/book

@ManfredSteyer



@ManfredSteyer
@ManfredSteyer
Slides & Examples

Remote and In-House

http://softwarearchitekt.at/workshops
d
@ManfredSteyer

You might also like