refactor(@angular/cli): introduce new package manager abstraction #31295
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Introduces a new abstraction layer for interacting with JavaScript package managers. This change centralizes all package-manager-specific logic into a single, reliable, and extensible interface. The primary motivation is to standardize package manager interactions for commands like
ng add
andng update
.The new system is designed to be highly testable. All side-effectful operations (file system access, command execution) are abstracted behind a
Host
interface, allowing for comprehensive and reliable unit testing in complete isolation.Key features include:
acquireTempPackage
method to support temporary, isolated package installations.This abstraction paves the way for the eventual removal of several direct package dependencies, including
ini
,@yarnpkg/lockfile
, andpacote
.