Skip to content

Repo containing utilities that help during development on an Nx workspace

License

Notifications You must be signed in to change notification settings

KwintenP/nx-etc

Repository files navigation

Nx-etc

This repo will hold some utilities that can be used in addition to Nx.

Partial checkouts

Problem description

When working with a monorepo style of development, all apps are in a single repository. In Nx land, there are two important building blocks, apps and libs. Apps are deployable artifacts that are build up out of a number of different libs. A lib can be a feature module, some reusable code, component library, ...

When developing with such a repo, it can get hard to get an overview over all these different files. Let's say that I'm working on app1, I don't want to open up all the other apps in the monorepo in my IDE. But, due to the flat structure of apps in a single directory, it is impossible to avoid this.

Reasons I want to avoid this is:

  • Performance. My IDE will eventually not be able to handle this anymore, if the monorepo grows too big.
  • File lookup. If I want to open a file, I might use the lookup system in IDE's to do so. When I look for 'app.component.ts' while working on 'app1', it would be cool to only have a single result instead of one for every app in the repo.
  • Clarity. It easily becomes hard to see what libs are used by an app.

Solution

Sparse checkouts

Git supports a feature called sparse checkouts. In this scenario, you can create a file called 'sparse-checkout' where, using some globs, you can instruct git which folders to checkout and which ones to 'hide'. This means the folders are not visible on the file system!

Dependency graph scripts from Nx

Nx exposes some script that can help us build, test, lint, ... only affected apps or generate a dependency graph of the entire monorepo. Using these scripts, you can find out all the dependencies of a certain app.

Combination of these features

Combining both features, the nx-etc 'checkout' functionality will checkout out only the files linked to a certain app.

How to use

Install nx-etc

yarn add --dev nx-etc

or

npm install --save-dev nx-etc

Note: We avoid having this installed globally, as we do with (almost) any package.

Enable sparse checkouts

First of all, you need to enable sparse checkouts. Do this using

git config core.sparseCheckout true

Using the lib

To checkout one project use:

npx nx-etc checkout ${appName}

Note: When checking out an app, with dependant libs, the other libs and apps will be hidden! See below to checkout everything again.

To checkout multiple projects use:

npx nx-etc checkout ${appName1} ${appName2}

To checkout everything use:

npx nx-etc checkout

Video tutorial

https://player.vimeo.com/video/295018577

About

Repo containing utilities that help during development on an Nx workspace

Resources

License

Code of conduct

Stars

Watchers

Forks

Packages

No packages published