Instruction file imported from wghglory/ngx-lift-workspace (
.cursor/rules/nx.mdc). Copyright stays with the author.
Nx Workspace Guidelines
Project Structure
-
Libraries: Place reusable code in
libs/directorylibs/ngx-lift/: Core Angular utilities library (RxJS operators, signals, pipes, validators)libs/clr-lift/: Clarity Design System component library (depends on ngx-lift)
-
Applications: Place applications in
apps/directoryapps/demo/: Demo application showcasing both librariesapps/demo-e2e/: E2E tests for demo app
-
Tools: Place build tools and scripts in
tools/directorytools/vitest/: Vitest configuration utilitiestools/eslint-plugin/: Custom ESLint rules
Project Configuration
- project.json: Each project has a
project.jsonwith targets - tsconfig.json: TypeScript configuration per project
- vite.config.mts: Vitest configuration for testing (libraries)
- ng-package.json: Angular packaging configuration (libraries)
- eslint.config.mjs: ESLint configuration per project
Nx Commands
- Build:
npx nx build [project-name] - Test:
npx nx test [project-name](notnx test) - Lint:
npx nx lint [project-name] - Serve:
npx nx serve [project-name] - E2E:
npx nx e2e [e2e-project-name] - Graph:
npx nx graph(visualize project dependencies)
Dependency Management
-
Module Boundaries: Respect Nx project boundaries
- Configured in
eslint.config.mjswith@nx/enforce-module-boundaries - No circular dependencies allowed
- Configured in
-
Tags: Use tags to organize projects
- Define in
project.jsonornx.json - Enforce dependency rules based on tags
- Define in
-
Imports: Libraries are local packages in this monorepo
// Import from ngx-lift library import {createAsyncState, poll} from 'ngx-lift'; // Import from clr-lift library import {AlertComponent, ToastService} from 'clr-lift'; // Path mappings defined in tsconfig.base.json
Code Generation
-
Generators: Use Nx generators for consistent structure
npx nx generate @nx/angular:library my-lib npx nx generate @nx/angular:component my-component --project=my-lib -
Schematic Options: Configure default options in
nx.json"generators": { "@nx/angular:component": { "style": "scss" } }
Build Configuration
-
Build Targets: Configure build targets in
project.json -
Dependencies: Use
dependsOnto specify build dependencies"dependsOn": ["^build"] -
Inputs: Define inputs for caching
"inputs": ["production", "^production"]
Testing Configuration
-
Vitest: Configure Vitest in
vite.config.mts- Test environment:
jsdom - Setup files:
src/test-setup.ts - Uses
@analogjs/vitest-angularfor Angular component testing - Transform configuration for TypeScript, HTML, and SVG files
- Test environment:
-
Playwright: Configure E2E tests in
playwright.config.ts- Use
nxE2EPresetfrom@nx/playwright - Configure web server for local development
- Use
Caching
-
Build Cache: Nx caches build outputs
- Use
nx resetto clear cache - Cache stored in
.nx/cache
- Use
-
Test Cache: Tests are cached based on inputs
- Only re-run tests when inputs change
Affected Commands
- Affected Graph:
npx nx affected:graph - Affected Test:
npx nx affected -t test - Affected Build:
npx nx affected -t build - Affected Lint:
npx nx affected -t lint
Workspace Configuration
-
nx.json: Workspace-level configuration
- Plugins configuration
- Target defaults
- Generators defaults
-
tsconfig.base.json: Base TypeScript configuration
- Path mappings
- Compiler options
Library Publishing
- Build Libraries:
npm run build:libs(builds both ngx-lift and clr-lift) - Build Individual:
npm run build:ngxornpm run build:clr - Watch Mode:
npm run watch:ngxornpm run watch:clr - Publish: Automated via GitHub Actions or manual
npm publish- Configuration in
ng-package.jsonper library - Output in
dist/libs/[library-name] - Version management via
nx release
- Configuration in
Best Practices
- Project Boundaries: Always respect module boundaries
- Dependency Rules: Configure and follow dependency rules
- Code Organization: Organize code by feature/domain
- Shared Code: Extract shared code to libraries
- Testing: Write tests for all libraries
- Documentation: Document library APIs and usage
Troubleshooting
- Cache Issues: Clear cache with
nx reset - Dependency Issues: Check
nx graphfor circular dependencies - Build Issues: Ensure all dependencies are built first
- Path Resolution: Verify
tsconfig.base.jsonpaths
Code Review Checklist - Nx Workspace
Use this checklist when reviewing workspace structure changes:
- Respects module boundaries
- No circular dependencies
