How the Project Graph is Built

Nx creates a graph of all the dependencies between projects in your workspace using two sources of information:

  1. Package dependencies defined in the package.json file for each project.

    If the myapp/package.json file has this dependency:

    1{
    2  "dependencies": {
    3    "@myorg/awesome-library": "*"
    4  }
    5}
    6

    Then my-app depends on awesome-library.

    Note: We typically use * for the dependency instead of a specific version because we want to depend on the version of the library as it currently exists in the repo.

  2. Typescript import statements referencing a particular project's path alias

    For instance, if a file in my-app has this code:

    import { something } from '@myorg/awesome-library';
    

    Then my-app depends on awesome-library

    This can be turned on or off with the analyzeSourceFiles flag.

  3. Manually created implicitDependencies in the project configuration file.

    If your project configuration has this content:

1{
2  "name": "myapp",
3  "nx": {
4    "implicitDependencies": ["some-api"]
5  }
6}
7

Then my-app depends on some-api

Recipes

Reference