nx
SKILL.md
Nx 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
Weekly Installs
2
Repository
mindrally/skillsInstalled on
opencode2
windsurf1
codex1
claude-code1
antigravity1
gemini-cli1