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:

    myapp/package.json
    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:

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

    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:

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

Then my-app depends on some-api.