Skip to content

Commit 9a014c7

Browse files
authoredMar 2, 2023
fix(core): plugin should not override existing external nodes (#15219)
1 parent 2abfa72 commit 9a014c7

File tree

5 files changed

+60
-27
lines changed

5 files changed

+60
-27
lines changed
 

‎e2e/js/src/js-swc.test.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1+
import { satisfies } from 'semver';
12
import { execSync } from 'child_process';
2-
import { writeFileSync } from 'fs-extra';
33
import {
44
checkFilesDoNotExist,
55
checkFilesExist,
@@ -107,7 +107,7 @@ describe('js e2e', () => {
107107
const swcHelpersFromDist = readJson(`dist/libs/${lib}/package.json`)
108108
.peerDependencies['@swc/helpers'];
109109

110-
expect(swcHelpersFromDist).toEqual(swcHelpersFromRoot);
110+
expect(satisfies(swcHelpersFromDist, swcHelpersFromRoot)).toBeTruthy();
111111

112112
updateJson(`libs/${lib}/.swcrc`, (json) => {
113113
json.jsc.externalHelpers = false;

‎e2e/js/src/js-tsc.test.ts

+5-2
Original file line numberDiff line numberDiff line change
@@ -137,8 +137,11 @@ describe('js e2e', () => {
137137
const rootPackageJson = readJson(`package.json`);
138138

139139
expect(
140-
readJson(`dist/libs/${lib}/package.json`).peerDependencies.tslib
141-
).toEqual(rootPackageJson.dependencies.tslib);
140+
satisfies(
141+
readJson(`dist/libs/${lib}/package.json`).peerDependencies.tslib,
142+
rootPackageJson.dependencies.tslib
143+
)
144+
).toBeTruthy();
142145

143146
updateJson(`libs/${lib}/tsconfig.json`, (json) => {
144147
json.compilerOptions = { ...json.compilerOptions, importHelpers: false };

‎e2e/node/src/node.test.ts

+31-15
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import {
2727
import { exec, execSync } from 'child_process';
2828
import * as http from 'http';
2929
import { getLockFileName } from 'nx/src/lock-file/lock-file';
30+
import { satisfies } from 'semver';
3031

3132
function getData(port, path = '/api'): Promise<any> {
3233
return new Promise((resolve) => {
@@ -263,21 +264,36 @@ describe('Build Node apps', () => {
263264
})
264265
);
265266

266-
expect(packageJson.dependencies['@nestjs/common']).toEqual(
267-
rootPackageJson.dependencies['@nestjs/common']
268-
);
269-
expect(packageJson.dependencies['@nestjs/core']).toEqual(
270-
rootPackageJson.dependencies['@nestjs/core']
271-
);
272-
expect(packageJson.dependencies['reflect-metadata']).toEqual(
273-
rootPackageJson.dependencies['reflect-metadata']
274-
);
275-
expect(packageJson.dependencies['rxjs']).toEqual(
276-
rootPackageJson.dependencies['rxjs']
277-
);
278-
expect(packageJson.dependencies['tslib']).toEqual(
279-
rootPackageJson.dependencies['tslib']
280-
);
267+
expect(
268+
satisfies(
269+
packageJson.dependencies['@nestjs/common'],
270+
rootPackageJson.dependencies['@nestjs/common']
271+
)
272+
).toBeTruthy();
273+
expect(
274+
satisfies(
275+
packageJson.dependencies['@nestjs/core'],
276+
rootPackageJson.dependencies['@nestjs/core']
277+
)
278+
).toBeTruthy();
279+
expect(
280+
satisfies(
281+
packageJson.dependencies['reflect-metadata'],
282+
rootPackageJson.dependencies['reflect-metadata']
283+
)
284+
).toBeTruthy();
285+
expect(
286+
satisfies(
287+
packageJson.dependencies['rxjs'],
288+
rootPackageJson.dependencies['rxjs']
289+
)
290+
).toBeTruthy();
291+
expect(
292+
satisfies(
293+
packageJson.dependencies['tslib'],
294+
rootPackageJson.dependencies['tslib']
295+
)
296+
).toBeTruthy();
281297

282298
checkFilesExist(
283299
`dist/apps/${nestapp}/${packageManagerLockFile[packageManager]}`

‎packages/nx/src/plugins/js/project-graph/build-nodes/build-npm-package-nodes.ts

+12-8
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { existsSync } from 'fs';
2+
import { defaultHashing } from '../../../../hasher/hashing-impl';
23
import { join } from 'path';
34

45
import { ProjectGraphBuilder } from '../../../../project-graph/project-graph-builder';
@@ -16,13 +17,16 @@ export function buildNpmPackageNodes(builder: ProjectGraphBuilder) {
1617
...packageJson.devDependencies,
1718
};
1819
Object.keys(deps).forEach((d) => {
19-
builder.addExternalNode({
20-
type: 'npm',
21-
name: `npm:${d}`,
22-
data: {
23-
version: deps[d],
24-
packageName: d,
25-
},
26-
});
20+
if (!builder.graph.externalNodes[`npm:${d}`]) {
21+
builder.addExternalNode({
22+
type: 'npm',
23+
name: `npm:${d}`,
24+
data: {
25+
version: deps[d],
26+
packageName: d,
27+
hash: defaultHashing.hashArray([d, deps[d]]),
28+
},
29+
});
30+
}
2731
});
2832
}

‎packages/nx/src/project-graph/project-graph-builder.ts

+10
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,16 @@ export class ProjectGraphBuilder {
6767
* Adds a external node to the project graph
6868
*/
6969
addExternalNode(node: ProjectGraphExternalNode): void {
70+
// Check if project with the same name already exists
71+
if (this.graph.externalNodes[node.name]) {
72+
throw new Error(
73+
`Multiple projects are named "${node.name}". One has version "${
74+
node.data.version
75+
}" and the other has version "${
76+
this.graph.externalNodes[node.name].data.version
77+
}". Please resolve the conflicting package names.`
78+
);
79+
}
7080
this.graph.externalNodes[node.name] = node;
7181
}
7282

1 commit comments

Comments
 (1)

vercel[bot] commented on Mar 2, 2023

@vercel[bot]

Successfully deployed to the following URLs:

nx-dev – ./

nx-dev-git-master-nrwl.vercel.app
nx-dev-nrwl.vercel.app
nx-five.vercel.app
nx.dev

Please sign in to comment.