Code like Google does with Nx

Diego Juliao

  • FullStack JavaScript Engineer 👨🏻‍🔬
  • Angular Package Creator 🅰️📦
  • Creator of ng deploy for @npmjs
  • Quality Advocate 🥑
  • Bike Traveler 🚴‍♂️

I was Born 👶

But I Live 🏠

ngx-deploy-npm

How does Google Code?

Case of Study

Distributed on NPM 📦

23 📦

Compose Angular Ecosystem

How to manage all those packages

With Separated Repos?

Let's See and Example

Let's Start a StartUp!

ACME Company

VATIN Challange

| CTRY |   Name   | Ex            |
| :--- | :------: | :------------ |
| 🇩🇪   | USt-IdNr | DE999999999   |
| 🇫🇷   |  n° TVA  | FRXX999999999 |
| 🇨🇴   |   NIT    | 11,338,854-3  |
| 🇻🇪   |   RIF    | J-30595991-8  |

ACME Company

VATIN

Value Added Tax Identification Number

ACME Company

VATIN Challange

Events

🇩🇪

 

🇫🇷

🇩🇪 🐞

 

🇨🇴

 

Product Team

Internal Tools Team

ACME Company

VATIN Challange

Events

🇩🇪

 

🇫🇷

🇩🇪 🐞

 

🇨🇴

 

Internal Tools Team

Product Team

🇯🇵

 

ACME Company in 5 Years

🇩🇪

 

🇦🇺

 

🇫🇮

 

🇲🇷

 

🇩🇯

 

🇨🇭

 

🇨🇦

 

🇦🇩

 

🇨🇳

 

🇲🇽

 

🇧🇭

 

🇧🇷

 

🇩🇯🐞

 

🇨🇦🐞

 

🇩🇪

 

🇦🇺

 

🇫🇮

 

🇲🇷

 

🇩🇯

 

🇨🇦

 

🇦🇩

 

🇨🇳

 

🇲🇽

 

🇧🇭

 

🇧🇷

 

🇨🇭🐞

 

🇩🇯🐞

 

🇨🇦🐞

 

Main Problems

  • Maintainability
  • Scalability
  • Agility
  • Code Reuse

Solution

Monorepo

A monorepo is a software development strategy where code for many projects are stored in the same repository

Source: Wikipedia

ACME Monorepo

Advantages

  • Ease of code reuse
  • Cross-project changes
  • Collaboration across teams
  • Large Scale Refactoring

What is NX?

Who founded NX?

Victor Savkin

Jeff Cross

Modern Tools

Applications and Libraries

📦

📦

📦

# Angular Library
nx g @nrwl/angular:library my-lib

# React Library
nx g @nrwl/react:library my-lib

# Typescript Library
nx g @nrwl/workspace:library my-lib

Libraries

# Angular Application
nx g @nrwl/angular:application my-app 

# React Application
nx g @nrwl/react:application my-app

# NestJS Application
nx g @nrwl/nest:application my-app

# Express Application
nx g @nrwl/express:application my-app

Applications

Dependency Graph

  • lint
  • test
  • build
  • e2e

Affected

Who is Using Nx?

Source: Nx Web Page

Do I need a large project to use Nx?

It Works Perfectly Fine!

Where to Learn?

Coming Soon

Bazel

Build and test Java, C++, Android, iOS, Go and a wide variety of other language platforms. Bazel runs on Windows, macOS, and Linux.

Source: Nx Blog

Conclusion

Conclusion

  • Reuse code through our organization
  • Cross-project changes
  • Ease the maintainability

Monorepo is a just repo with all your projects

Conclusion

  • Create Projects and Libs
  • Run script only for the affected
  • Only for Typescript (for now)

Nx is an Extensible Dev Tools for Monorepos

Conclusion

Nx

Tha

Diego Juliao

  • FullStack JavaScript Engineer 👨🏻‍🔬
  • Angular Package Creator 🅰️📦
  • Creator of ng deploy for @npmjs
  • Quality Advocate 🥑
  • Bike Traveler 🚴‍♂️

Twitter: @ngVenezuela

Telegram: @ngVenezuela

Angular Venezuela

Code Like Google Does with Nx

By Diego Juliao

Code Like Google Does with Nx

  • 753