About nx
An Nx development skill for teams organizing and building monorepos. It covers workspace structure, generators, dependency boundaries, task execution, caching, testing, and CI workflows.
Key features
- 01Nx workspace and project configuration
- 02Generator-based code scaffolding
- 03Dependency boundary enforcement
- 04Affected task execution and caching
- 05Testing and CI workflow guidance
Use cases
- 01Structuring apps and libraries in an Nx monorepo
- 02Generating consistent projects and components
- 03Running tests only for changed projects
Install
Copy the command and run it in a terminal.
$
npx skills add https:/ / github.com/ mindrally/ skills --skill nxAfter installing, type/nxin Claude Code to confirm it loaded.
Details
From the project READMENx Monorepo Development
You are an expert in Nx, the smart, fast, and extensible build system for monorepos.
Project Structure
- Organize projects following Nx conventions:
apps/- Application projects (web apps, APIs, mobile apps)libs/- Library projects (shared code, features, utilities)
- Use consistent naming patterns:
scope-type-name(e.g.,shared-ui-button) - Group related libraries under feature folders
Workspace Configuration
Configure nx.json for workspace-wide settings:
{
"targetDefaults": {
"build": {
"dependsOn": ["^build"],
"cache": true
},
"test": {
"cache": true
}
},
"defaultBase": "main"
}
- Use
project.jsonfor project-specific configuration - Define proper
tagsfor enforcing module boundaries
Project Configuration
Each project should have a project.json:
{
"name": "my-app",
"sourceRoot": "apps/my-app/src",
"projectType": "application",
"tags": ["scope:web", "type:app"],
"targets": {
"build": { },
"serve": { },
"test": { }
}
}
- Define clear project types:
applicationorlibrary - Use tags for enforcing dependency constraints
Code Generation
- Use Nx generators for consistent code scaffolding:
nx g @nx/react:app my-app- Generate React applicationnx g @nx/react:lib my-lib- Generate React librarynx g @nx/react:component my-component --project=my-lib- Generate component
- Create custom generators for project-specific patterns
- Use
--dry-runto preview changes before execution
Module Boundaries
Enforce boundaries using ESLint rules:
{
"@nx/enforce-module-boundaries": [
"error",
{
"depConstraints": [
{ "sourceTag": "type:app", "onlyDependOnLibsWithTags": ["type:lib", "type:util"] },
{ "sourceTag": "type:lib", "onlyDependOnLibsWithTags": ["type:lib", "type:util"] },
{ "sourceTag": "scope:web", "onlyDependOnLibsWithTags": ["scope:web", "scope:shared"] }
]
}
]
}
- Define clear dependency rules between project types
- Use scopes to separate domain boundaries
Caching and Performance
- Enable computation caching for faster builds
- Configure Nx Cloud for distributed caching and task execution
- Use affected commands to only run tasks for changed projects:
nx affected:buildnx affected:testnx affected:lint
- Define proper
inputsandoutputsfor accurate caching
Task Execution
- Run tasks with Nx CLI:
nx build my-app- Build specific projectnx run-many -t build- Build all projectsnx affected -t test- Test affected projects
- Use task pipelines for proper dependency ordering
- Configure parallel execution for independent tasks
Testing Strategy
- Use Jest for unit testing with Nx presets
- Configure Cypress or Playwright for E2E testing
- Implement component testing for UI libraries
- Use
nx affected:testin CI for efficient test runs
CI/CD Integration
- Use Nx Cloud for distributed task execution
- Configure GitHub Actions with Nx:
- uses: nrwl/nx-set-shas@v4 - run: nx affected -t lint test build - Implement proper caching strategies
- Use
nx-cloud recordfor capturing metrics
Best Practices
- Keep applications thin; move logic to libraries
- Create shared utility libraries for common code
- Use barrel exports (
index.ts) for clean imports - Implement proper type exports from libraries
- Document library purposes and public APIs
- Use Nx Console VS Code extension for visual project management
- Leverage the project graph for understanding dependencies:
nx graph
Comments
Markdown supported