From a95b91d433f958bccc622beb1483a7aba15ae189 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miroslav=20Jona=C5=A1?= Date: Mon, 28 Nov 2022 17:26:32 +0100 Subject: [PATCH] fix(core): generated package.json should not include duplicates and optional peer deeps (#13438) --- e2e/node/src/node.test.ts | 7 +++---- packages/nx/package.json | 6 +++--- packages/nx/src/utils/create-package-json.ts | 13 ++++++++++--- 3 files changed, 16 insertions(+), 10 deletions(-) diff --git a/e2e/node/src/node.test.ts b/e2e/node/src/node.test.ts index a3375c2572d94..305b2ff3a4c02 100644 --- a/e2e/node/src/node.test.ts +++ b/e2e/node/src/node.test.ts @@ -227,7 +227,9 @@ describe('Node Applications', () => { describe('Build Node apps', () => { beforeEach(() => newProject()); - it('should generate a package.json with the `--generatePackageJson` flag', async () => { + afterEach(() => cleanupProject()); + + it('should generate a package.json with the `--generatePackageJson` flag MMM', async () => { const scope = newProject(); const nestapp = uniq('nestapp'); runCLI(`generate @nrwl/nest:app ${nestapp} --linter=eslint`); @@ -251,9 +253,6 @@ describe('Build Node apps', () => { expect( satisfies(packageJson.dependencies['@nestjs/core'], '^9.0.0') ).toBeTruthy(); - expect( - satisfies(packageJson.dependencies['@nestjs/platform-express'], '^9.0.0') - ).toBeTruthy(); expect( satisfies(packageJson.dependencies['reflect-metadata'], '^0.1.13') ).toBeTruthy(); diff --git a/packages/nx/package.json b/packages/nx/package.json index aaf0bd1ef15a1..31d9161fad4be 100644 --- a/packages/nx/package.json +++ b/packages/nx/package.json @@ -36,6 +36,7 @@ "@yarnpkg/lockfile": "^1.1.0", "@yarnpkg/parsers": "^3.0.0-rc.18", "@zkochan/js-yaml": "0.0.6", + "axios": "^1.0.0", "chalk": "4.1.0", "chokidar": "^3.5.1", "cli-cursor": "3.1.0", @@ -49,6 +50,7 @@ "fs-extra": "^10.1.0", "glob": "7.1.4", "ignore": "^5.0.4", + "js-yaml": "4.1.0", "jsonc-parser": "3.2.0", "minimatch": "3.0.5", "npm-run-path": "^4.0.1", @@ -62,9 +64,7 @@ "tslib": "^2.3.0", "v8-compile-cache": "2.3.0", "yargs": "^17.6.2", - "yargs-parser": "21.1.1", - "js-yaml": "4.1.0", - "axios": "^1.0.0" + "yargs-parser": "21.1.1" }, "peerDependencies": { "@swc-node/register": "^1.4.2", diff --git a/packages/nx/src/utils/create-package-json.ts b/packages/nx/src/utils/create-package-json.ts index be3e95ce98c62..475f92211b650 100644 --- a/packages/nx/src/utils/create-package-json.ts +++ b/packages/nx/src/utils/create-package-json.ts @@ -40,7 +40,10 @@ export function createPackageJson( const rootPackageJson = readJsonFile(`${options.root || '.'}/package.json`); Object.entries(npmDeps).forEach(([packageName, version]) => { - if (rootPackageJson.devDependencies?.[packageName]) { + if ( + rootPackageJson.devDependencies?.[packageName] && + !packageJson.dependencies[packageName] + ) { packageJson.devDependencies[packageName] = version; } else { packageJson.dependencies[packageName] = version; @@ -106,8 +109,12 @@ function recursivelyCollectPeerDependencies( .map((dependency) => graph.externalNodes[dependency]) .filter(Boolean) .forEach((node) => { - list[node.data.packageName] = node.data.version; - recursivelyCollectPeerDependencies(node.name, graph, list, seen); + if ( + !packageJson.peerDependenciesMeta?.[node.data.packageName]?.optional + ) { + list[node.data.packageName] = node.data.version; + recursivelyCollectPeerDependencies(node.name, graph, list, seen); + } }); return list; } catch (e) {