nx/docs/shared/packages/eslint/enforce-module-boundaries.md
Miroslav Jonaš c4c8b0150d
feat(linter): add option to exclude projects from circular deps check (#27504)
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #

---------

Co-authored-by: FrozenPandaz <jasonjean1993@gmail.com>
2024-09-03 14:33:41 -04:00

5.8 KiB

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:

{
  // ... more ESLint config here
  "overrides": [
    {
      "files": ["*.ts", "*.tsx", "*.js", "*.jsx"],
      "rules": {
        "@nx/enforce-module-boundaries": [
          "error",
          {
            // ...rule specific configuration
          }
        ]
      }
    }
    // ... more ESLint overrides here
  ]
}

Options

Property Type Default Description
allow Array [] 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
ignoredCircularDependencies Array<[string, string]> [] List of project pairs that should be skipped from Circular dependencies checks, including the self-circular dependency check. E.g. ['feature-project-a', 'myapp']. Project name can be replaced by catch all * for more generic matches.
checkDynamicDependenciesExceptions Array [] List of imports that should be skipped for Imports of lazy-loaded libraries forbidden checks. 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 [] 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 a 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 List of tags the source project must contain to match the constraint
onlyDependOnLibsWithTags Array The source can depend only on projects that contain at least one of these tags
notDependOnLibsWithTags Array The source can not depend on projects that contain at least one of these tags
allowedExternalImports Array Exclusive list of external (npm) packages that are allowed to be imported
bannedExternalImports Array List of external (npm) packages that are banned from importing

Read more about the proper usage of this rule: