From 0835bd815f1ad6616e4c70d535d4d52036edf8fd Mon Sep 17 00:00:00 2001 From: Alan Agius <17563226+alan-agius4@users.noreply.github.com> Date: Wed, 12 Nov 2025 14:37:31 +0000 Subject: [PATCH] build: improve dependency management for local packages Refactor .pnpmfile.cjs to use a Set for localAngularPackages for better performance. Adjust typescript dependency handling in compiler-cli to correctly use devDependencies. Promote rxjs and zone.js from peer dependencies to regular dependencies for local packages. These changes streamline dependency resolution and align with pnpm's behavior for workspace dependencies. --- .pnpmfile.cjs | 25 +++++++++++++++++-------- packages/compiler-cli/package.json | 3 +++ pnpm-lock.yaml | 2 +- 3 files changed, 21 insertions(+), 9 deletions(-) diff --git a/.pnpmfile.cjs b/.pnpmfile.cjs index 9408cbb8c4f..9fbb50301f0 100644 --- a/.pnpmfile.cjs +++ b/.pnpmfile.cjs @@ -1,5 +1,5 @@ // TODO: Define these packages in a single common location. -const localAngularPackages = [ +const localAngularPackages = new Set([ '@angular/animations', '@angular/common', '@angular/compiler', @@ -15,7 +15,9 @@ const localAngularPackages = [ '@angular/router', '@angular/service-worker', '@angular/upgrade', -]; +]); + +const peerDepsToChange = new Set(['zone.js', 'rxjs']); function readPackage(pkg, context) { // TODO(devversion): This allows us to make compiler/TS a production dependency of compiler-cli @@ -25,31 +27,38 @@ function readPackage(pkg, context) { pkg.dependencies = { ...pkg.dependencies, '@angular/compiler': 'workspace:*', - 'typescript': '5.9.3', + 'typescript': pkg.devDependencies['typescript'], }; + + delete pkg.devDependencies['typescript']; } - Object.entries(pkg.peerDependencies).forEach(([key, version]) => { + for (const [key, version] of Object.entries(pkg.peerDependencies)) { // Any package that has a peerDependency on rxjs or zone.js, should instead treat the peerDependency as a // regular dependency. - if (['rxjs', 'zone.js'].includes(key)) { + if (peerDepsToChange.has(key)) { pkg.dependencies = { ...pkg.dependencies, - [key]: version, + [key]: pkg.devDependencies[key] ?? version, }; + + delete pkg.devDependencies[key]; + + continue; } // Change all locally generated packages to directly depend on the other local packages, instead // of expecting them as peerDependencies automatically as we do not auto install peer deps. The // package is also removed from peerDependencies as it was moved over and will just cause errors. - if (localAngularPackages.includes(key) && pkg.version === '0.0.0-PLACEHOLDER') { + if (pkg.version === '0.0.0-PLACEHOLDER' && localAngularPackages.has(key)) { pkg.dependencies = { ...pkg.dependencies, [key]: 'workspace: *', }; + delete pkg.peerDependencies[key]; } - }); + } return pkg; } diff --git a/packages/compiler-cli/package.json b/packages/compiler-cli/package.json index ea9cf7d2721..5942c2140ff 100644 --- a/packages/compiler-cli/package.json +++ b/packages/compiler-cli/package.json @@ -39,6 +39,9 @@ "tslib": "^2.3.0", "yargs": "^18.0.0" }, + "devDependencies": { + "typescript": "5.9.3" + }, "peerDependencies": { "@angular/compiler": "0.0.0-PLACEHOLDER", "typescript": ">=5.9 <6.0" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ad1235fc65d..850259278b4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -10,7 +10,7 @@ overrides: packageExtensionsChecksum: sha256-3L73Fw32UVtE6x5BJxJPBtQtH/mgsr31grNpdhHP1IY= -pnpmfileChecksum: sha256-vPvk/mBsTHwJvR6NXsWAPUB+5p/66ODkNQwJchPTYMM= +pnpmfileChecksum: sha256-TYPFsbGgXlr65uhno3A1oHE+n2qqt8R+w/szQ+Wq97s= patchedDependencies: dagre-d3-es: