AgentSkillsCN

dependency-enforcement

利用dependency-cruiser检查并强制执行项目依赖规则。

SKILL.md
--- frontmatter
name: dependency-enforcement
description: Checks and enforces project dependency rules using dependency-cruiser.

Dependency Enforcement

Use this skill to verify that code changes (especially imports) respect the strict Modular Monolith boundaries.

1. Configuration Files

IMPORTANT: This project uses THREE dependency-cruiser config files:

FilePurposeCommand
.dependency-cruiser.jsCore/shared rules (base config)N/A (extended by others)
.dependency-cruiser.server.jsServer-specific rules + hexagonal architecturenpm run depcruise:server
.dependency-cruiser.ui.jsUI-specific rules + view isolationnpm run depcruise:ui

When reviewing or modifying dependency rules, always check all three files.

2. Rules Overview

Core Rules (.dependency-cruiser.js)

  • no-circular: Warn on circular dependencies
  • no-orphans: Info on unused modules
  • no-deprecated-core: Warn on deprecated Node.js modules
  • server-no-ui: Server cannot import UI
  • ui-no-server: UI cannot import Server
  • controller-no-repository: Controllers use Services, not Repositories
  • service-no-controller: Services cannot import Controllers
  • feature-isolation (UI): Features shouldn't import other features
  • components-no-containers: Presentational components shouldn't import containers

Server Rules (.dependency-cruiser.server.js)

  • module-isolation: Feature modules cannot import other feature modules
  • shared-no-modules: Shared code cannot import feature modules
  • Hexagonal Architecture (ADR-005):
    • shared-module-encapsulation: Business modules must use adapters, not shared module internals
    • ports-no-implementation-deps: Ports cannot import modules or adapters

UI Rules (.dependency-cruiser.ui.js)

  • feature-isolation: Feature containers isolated from each other
  • ui-no-dto: UI cannot import DTO files
  • view-isolation: Views cannot import other views
  • shared-no-features: Shared UI cannot import feature containers
  • only-containers-access-views: Only containers can import from /views/

3. Running Checks

VS Code Task (Recommended)

Task IDDescription
shell: depcruise verifyRun full dependency validation

Terminal Commands

bash
# Check All
npm run depcruise:verify

# Check Server only
npm run depcruise:server

# Check UI only
npm run depcruise:ui

Visualizing Dependencies

bash
npm run depcruise:graph:server
npm run depcruise:graph:ui

4. Common Violations

ViolationFix
Importing a DTO from src/server into src/uiMove type to src/shared/types
Importing from shared/modules/auth/auth.service.tsUse adapter: shared/adapters/auth
Feature A importing Feature BExtract to shared/ or duplicate
View importing another viewRefactor to component or hook

5. Adding New Rules

When adding rules for new architectural patterns:

  1. Determine scope: Core (both), Server-only, or UI-only
  2. Add to the appropriate config file
  3. Update this skill documentation
  4. Run npm run depcruise:verify to test