NX
What is it
nx is a monorepo framework for
Why use it
Caches for speed.
Parallel run for each workflow.
Visibility using graph.
apps vs libs
Apps = deployable artifacts
Libs = Actual code and business logic
Approach
libs is not about holding the shared code.
In NX, the goal is to have almost no code in apps and have almost all of the code located in libs.
Even code that won't be shared between apps should be put into libs.
Naming of folders
The folders generated corresponding to apps and libs can be found in nx.json.
- It can be customized to have other names, but is not recommended
"workspaceLayout": { "appsDir": "apps", "libsDir": "libs" }
Keywords
scope
Scope defines a logical group or domain which contains multiple libs.
type
Type defines content of the library and its purpose and usage.
platform
Libraries can be tagged with platform if they are used for specific device usage.
tags
Define module boundary rules so violations are caught.
- eslintis used for static checking
e,g, type:util tagged lib can only be used by other libs with the same tag.
Tags are defined in nx.json:
"some-scope": { "tags": ["type:shared", "scope:some-scope"] }
In eslintrc.json:
{ "sourceTag": "scope:some-scope", "onlyDependOnLibsWithTags": [ "scope:shared" ] }