Enforce module boundaries rule
The @nx/enforce-module-boundaries ESLint rule enables you to define strict rules for accessing resources between different projects in the repository. Enforcing strict boundaries helps to prevent unplanned cross-dependencies.
Usage
You can use the enforce-module-boundaries rule by adding it to your ESLint rules configuration:
1{
2  // ... more ESLint config here
3  "overrides": [
4    {
5      "files": ["*.ts", "*.tsx", "*.js", "*.jsx"],
6      "rules": {
7        "@nx/enforce-module-boundaries": [
8          "error",
9          {
10            // ...rule specific configuration
11          }
12        ]
13      }
14    }
15    // ... more ESLint overrides here
16  ]
17}
18Options
| Property | Type | Default | Description | 
|---|---|---|---|
| allow | Array<string> | [] | List of imports that should be allowed without any checks | 
| allowCircularSelfDependency | boolean | false | Disable check for self circular dependency when project imports from itself via alias path | 
| banTransitiveDependencies | boolean | false | Ban import of dependencies that were not specified in the root or project's package.json | 
| checkDynamicDependenciesExceptions | Array<string> | [] | List of imports that should be skipped for Imports of lazy-loaded libraries forbiddenchecks. E.g.['@myorg/lazy-project/component/*', '@myorg/other-project'] | 
| checkNestedExternalImports | boolean | false | Enable to enforce the check for banned external imports in the nested packages. Check Dependency constraits for more information | 
| enforceBuildableLibDependency | boolean | false | Enable to restrict the buildable libs from importing non-buildable libraries | 
| depConstraints | Array<object> | [] | List of dependency constraints between projects | 
Dependency constraints
The depConstraints is an array of objects representing the constraints defined between source and target projects. A constraint must include sourceTag or allSourceTags. The constraints are applied with AND logical operation - for given source project the resulting constraints would be all that match its tags.
| Property | Type | Description | 
|---|---|---|
| sourceTag | string | Tag that source project must contain to match the constraint | 
| allSourceTags | Array<string> | List of targs the source project must contain to match the constraint | 
| onlyDependOnLibsWithTags | Array<string> | The source can depend only on projects that contain at least one of these tags | 
| notDependOnLibsWithTags | Array<string> | The source can not depend on projects that contain at least one of these tags | 
| allowedExternalImports | Array<string> | Exclusive list of external (npm) packages that are allowed to be imported | 
| bannedExternalImports | Array<string> | List of external (npm) packages that are banned from importing | 
Read more about the proper usage of this rule: