-
Notifications
You must be signed in to change notification settings - Fork 2.4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
fix(core): support subpath exports when constructing the project graph #29577
fix(core): support subpath exports when constructing the project graph #29577
Conversation
The latest updates on your projects. Learn more about Vercel for Git ↗︎ 1 Skipped Deployment
|
Sibling dependencies that rely exclusively on subpath exports are excluded from the dependency graph because there is no exact match. This adds a fallback to look for subpath exports if the exact match is not found. This also adds logic to respect conditional exports independent from subpath exports.
ced1a12
to
872b514
Compare
View your CI Pipeline Execution ↗ for commit 872b514.
☁️ Nx Cloud last updated this comment at |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for the contribution!
I updated it to include some extra changes to cover more scenarios and added test coverage to ensure we don't regress.
packages/nx/src/plugins/js/project-graph/build-dependencies/target-project-locator.ts
Show resolved
Hide resolved
#29577) Sibling dependencies that rely exclusively on subpath exports are excluded from the dependency graph because there is no exact match. This adds a fallback to look for subpath exports if the exact match is not found. This also adds logic to respect conditional exports independent from subpath exports. <!-- 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 Importing a workspace dependency via subpath export fails to match the package name, and so is not included in the dependency graph. ### Example ```apps/api/package.json``` ```json "name": "@my-org/api", "dependencies": { "@my-org/services": "workspace:*" } ``` ```libs/services/package.json``` ```json "name": "@my-org/services", "exports": { "./email": "./dist/email.js" } ``` The `@my-org/api` app should be able to import the email service with `import { EmailService } from "@my-org/services/email"`. However, the `getPackageEntryPointsToProjectMap` implementation results in an object with a key of `@my-org/services/email`, but not `@my-org/services`. This is not specifically a problem, except that `findDependencyInWorkspaceProjects` only considers exact matches within those object keys. ## Expected Behavior Importing a workspace dependency via subpath export should be included in the dependency graph. I also addressed a related issue where the following resulted in keys of `@my-org/services/default` and `@my-org/services/types`, which is incorrect according to the subpath/conditional export rules. ```json "exports": { "default": "./dist/index.js", "types": "./dist/index.d.ts" } ``` ## Related Issue(s) <!-- Please link the issue being fixed so it gets closed when this is merged. --> Fixes #29486 --------- Co-authored-by: Leosvel Pérez Espinosa <[email protected]>
#29577) Sibling dependencies that rely exclusively on subpath exports are excluded from the dependency graph because there is no exact match. This adds a fallback to look for subpath exports if the exact match is not found. This also adds logic to respect conditional exports independent from subpath exports. <!-- 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 Importing a workspace dependency via subpath export fails to match the package name, and so is not included in the dependency graph. ### Example ```apps/api/package.json``` ```json "name": "@my-org/api", "dependencies": { "@my-org/services": "workspace:*" } ``` ```libs/services/package.json``` ```json "name": "@my-org/services", "exports": { "./email": "./dist/email.js" } ``` The `@my-org/api` app should be able to import the email service with `import { EmailService } from "@my-org/services/email"`. However, the `getPackageEntryPointsToProjectMap` implementation results in an object with a key of `@my-org/services/email`, but not `@my-org/services`. This is not specifically a problem, except that `findDependencyInWorkspaceProjects` only considers exact matches within those object keys. ## Expected Behavior Importing a workspace dependency via subpath export should be included in the dependency graph. I also addressed a related issue where the following resulted in keys of `@my-org/services/default` and `@my-org/services/types`, which is incorrect according to the subpath/conditional export rules. ```json "exports": { "default": "./dist/index.js", "types": "./dist/index.d.ts" } ``` ## Related Issue(s) <!-- Please link the issue being fixed so it gets closed when this is merged. --> Fixes #29486 --------- Co-authored-by: Leosvel Pérez Espinosa <[email protected]> (cherry picked from commit d08ad75)
This pull request has already been merged/closed. If you experience issues related to these changes, please open a new issue referencing this pull request. |
Sibling dependencies that rely exclusively on subpath exports are excluded from the dependency graph because there is no exact match.
This adds a fallback to look for subpath exports if the exact match is not found.
This also adds logic to respect conditional exports independent from subpath exports.
Current Behavior
Importing a workspace dependency via subpath export fails to match the package name, and so is not included in the dependency graph.
Example
apps/api/package.json
libs/services/package.json
The
@my-org/api
app should be able to import the email service withimport { EmailService } from "@my-org/services/email"
.However, the
getPackageEntryPointsToProjectMap
implementation results in an object with a key of@my-org/services/email
, but not@my-org/services
. This is not specifically a problem, except thatfindDependencyInWorkspaceProjects
only considers exact matches within those object keys.Expected Behavior
Importing a workspace dependency via subpath export should be included in the dependency graph.
I also addressed a related issue where the following resulted in keys of
@my-org/services/default
and@my-org/services/types
, which is incorrect according to the subpath/conditional export rules.Related Issue(s)
Fixes #29486