fix(core): generated package.json should not include duplicates and optional peer deeps (#13438)

This commit is contained in:
Miroslav Jonaš 2022-11-28 17:26:32 +01:00 committed by GitHub
parent db3499d3a6
commit a95b91d433
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 16 additions and 10 deletions

View File

@ -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();

View File

@ -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",

View File

@ -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) {