fix(core): cross-workspace implicitDependencies should be safely ignored (#28845)

This commit is contained in:
James Henry 2024-11-11 20:32:11 +04:00 committed by GitHub
parent cc251e4378
commit 0fd3442e47
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 48 additions and 2 deletions

View File

@ -767,3 +767,45 @@ describe('global installation', () => {
});
});
});
describe('cross-workspace implicit dependencies', () => {
beforeAll(() =>
newProject({
packages: ['@nx/js'],
})
);
afterAll(() => cleanupProject());
it('should successfully build a project graph when cross-workspace implicit dependencies are present', () => {
const npmPackage = uniq('npm-package');
runCLI(`generate @nx/workspace:npm-package ${npmPackage}`);
function setImplicitDependencies(deps: string[]) {
updateFile(join(npmPackage, 'package.json'), (content) => {
const json = JSON.parse(content);
json.nx = {
...json.nx,
implicitDependencies: deps,
};
return JSON.stringify(json, null, 2);
});
}
// First set the implicit dependencies to an intentionally invalid value to prove the command fails during project graph construction
setImplicitDependencies(['this-project-does-not-exist']);
expect(
runCLI(`test ${npmPackage}`, {
silenceError: true,
})
).toContain('Failed to process project graph');
// Now set the implicit dependencies to a cross-workspace reference to prove that it is valid, despite not being resolvable in the current workspace
setImplicitDependencies(['nx-cloud:another-workspace']);
expect(
runCLI(`test ${npmPackage}`, {
silenceError: true,
})
).toContain('Successfully ran target test');
});
});

View File

@ -114,7 +114,10 @@ function detectAndSetInvalidProjectGlobValues(
const projectName = implicit.startsWith('!')
? implicit.substring(1)
: implicit;
// Do not error on cross-workspace implicit dependency references
if (projectName.startsWith('nx-cloud:')) {
return false;
}
return !(
projectConfigurations[projectName] ||
findMatchingProjects([implicit], projects).length

View File

@ -49,7 +49,8 @@ export function findMatchingProjects(
}
for (const stringPattern of patterns) {
if (!stringPattern.length) {
// Do not waste time attempting to look up cross-workspace references which will never match
if (!stringPattern.length || stringPattern.startsWith('nx-cloud:')) {
continue;
}