diff --git a/tools/dependencies/check-nx-version-sync.mjs b/tools/dependencies/check-nx-version-sync.mjs index 975918a80..8ae344c0c 100644 --- a/tools/dependencies/check-nx-version-sync.mjs +++ b/tools/dependencies/check-nx-version-sync.mjs @@ -31,7 +31,7 @@ export function validateNxVersionSync({ packageJson, lockfile }) { const section = packageJson[sectionName] ?? {}; for (const [packageName, specifier] of Object.entries(section)) { if ( - packageName.startsWith('@nx/') && + (packageName === 'nx' || packageName.startsWith('@nx/')) && specifier !== expectedVersion ) { diagnostics.push( diff --git a/tools/dependencies/check-nx-version-sync.test.mjs b/tools/dependencies/check-nx-version-sync.test.mjs index 01bd213a6..de0f3ee92 100644 --- a/tools/dependencies/check-nx-version-sync.test.mjs +++ b/tools/dependencies/check-nx-version-sync.test.mjs @@ -110,6 +110,30 @@ test('rejects a direct official Nx peer dependency mismatch', async (t) => { ); }); +test('rejects an extra direct Nx declaration mismatch', async (t) => { + const rootDir = await createFixture(t, { + packageJson: { + devDependencies: { + nx: '22.7.2', + }, + optionalDependencies: { + nx: '22.7.1', + }, + }, + packages: { + 'nx@22.7.2': {}, + }, + }); + + const result = runValidator(rootDir); + + assert.equal(result.status, 1); + assert.match( + result.stderr, + /optionalDependencies\["nx"\] must match nx@22\.7\.2, found "22\.7\.1"/ + ); +}); + test('rejects a non-exact root Nx version', async (t) => { const rootDir = await createFixture(t, { packageJson: {