You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
With Node.js 16's now being End of Life'd, we dropped support for Node.js versions lower than 18.12.
Some important defaults have changed:
yarn init and yarn set version will prefer using packageManager rather than yarnPath when possible (when they detect COREPACK_ROOT in your environment variables).
yarn init will no longer use zero-install by default. You still can enable it, but it should make it easier to start one-of projects without having to rewrite the configuration afterwards.
As a result, enableGlobalCache now defaults to true. If your project uses Zero-Installs, the first yarn install you run after migrating to 4.0 will automatically set enableGlobalCache: false in your local .yarnrc.yml.
yarn workspaces foreach now requires one of --all, --recursive, --since, or --worktree to be explicitly specified; the previous default was --worktree, but it was rarely what users expected.
compressionLevel now defaults to 0 rather than mixed. It's been proved significantly faster on installs, and the size impact was reasonable enough to change the default. Note that it benefits you even if you use Zero-Installs: as per our tests, a zero-compression is actually easier to handle for Git (you can see by yourself with those examples using compressionLevel: 0 vs compressionLevel: mixed).
To avoid making the upgrade too disruptive, Yarn will check whether Zero-Installs are enabled the first time you run yarn install after migrating from 3.6 to 4.0. If you do, it will automatically set the old default (compressionLevel: mixed) in your .yarnrc.yml file. You can then remove it whenever you feel ready to actually change the compression settings.
All official Yarn plugins are now included by default in the bundle we provide. You no longer need to run yarn plugin import for official plugins (you still need to do it for third-party plugins, of course).
This doesn't change anything to the plugin API we provide, which will keep being maintained.
Yarn still has a modular architecture and uses the exact same APIs as contrib plugins; all that changes is how we distribute our own features.
Yarn's UI during installs has been greatly improved:
Packages added and removed from the lockfile are now explicitly reported.
Fluctuations in the project cache size are now reported as a single line.
Unactionable warnings (node-gyp and transitive peer dependency errors) have been removed.
Skipped builds are now only reported during initial installs and manual yarn rebuild calls.
Deprecation checks have been moved to yarn npm audit.
Some settings were renamed or removed:
caFilePath is now httpsCaFilePath
preferAggregateCacheInfo has been removed (it's now always on)
pnpDataPath has been removed to adhere to our new PnP specification. For consistency, all PnP files will now be hardcoded to a single value so that third-party tools can implement the PnP specification without relying on the Yarn configuration.
The yarn npm audit command has been reimplemented:
The audit registry must now implement the /-/npm/v1/security/advisories/bulk endpoint.
The npmAuditRegistry can be used to temporarily route audit queries to the npm registry.
Deprecations are now returned by default. To silence them, use yarn npm audit ! --no-deprecations.
Some legacy layers have been sunset:
Plugins cannot access the Clipanion 2 APIs anymore (upgrade to Clipanion 3)
Plugins cannot access the internal copy of Yup anymore (use Typanion instead)
Yarn will no longer remove the old Yarn 2.x .pnp.js file when migrating.
The --assume-fresh-project flag of yarn init has been removed.
API Changes
The following changes only affect people writing Yarn plugins:
The ZipFS and ZipOpenFS classes have been moved from @yarnpkg/fslib to @yarnpkg/libzip. They no longer need or accept the libzip parameter.
Reading the zip archives is now done on the Node.js side for performance; as a result, the open, ZIP_CREATE, and ZIP_TRUNCATE bindings are no longer needed for ZipFS and have also been removed.
The dependencies field sent returned by Resolver#resolve must now be the result of a Configuration#normalizeDependencyMap call. This change is prompted by a refactoring of how default protocols (ie npm:) are injected into descriptors. The previous implementation caused various descriptors to never be normalized, which made it difficult to know what were the descriptors each function should expect.
Similarly, the descriptors returned by Resolve#getResolutionDependencies are now expected to be the result of Configuration#normalizeDependency calls.
Note that this only applies to the dependencies field; the peerDependencies field is unchanged, as it must only contains semver ranges without any protocol (with an exception for workspace:, but that's not relevant here).
The Resolve#getResolutionDependencies function must now return an object of arbitrary string keys and descriptor values (instead of a map with DescriptorHash keys). Those descriptors will be resolved and assigned to the same keys as the initial object. This change allows resolvers to wrap resolution dependencies from other resolvers, which wasn't possible before since it'd have caused the key to change.
The generateLoader function in @yarnpkg/pnp no longer generates the $$SETUP_STATE function, it now needs to be present in the loader passed to the function.
The getCustomDataKey function in Installer from @yarnpkg/core has been moved to Linker.
renderForm's options argument is now required to enforce that custom streams are always specified.
npmConfigUtils.getAuditRegistry no longer takes a Manifest as its first argument.
The FetchOptions.skipIntegrityCheck option has been removed. Use FetchOptions.cacheOptions.skipIntegrityCheck instead.
MapConfigurationValue has been removed. Use miscUtils.ToMapValue instead.
Manifest.isManifestFieldCompatible and Manifest.prototype.isCompatibleWith{OS,CPU} have been removed. Use Manifest.prototype.getConditions and structUtils.isPackageCompatible instead.
versionUtils.{fetchBase,fetchRoot,fetchChangedFiles} have been moved from @yarnpkg/plugin-version to @yarnpkg/plugin-git. Use gitUtils.{fetchBase,fetchRoot,fetchChangedFiles} instead.
For consistency reasons:
Link{Resolver,Fetcher} have been renamed to Portal{Resolver,Fetcher}
RawLink{Resolver,Fetcher} have been renamed to Link{Resolver,Fetcher}
FakeFS classes are now required to implement lutimes{Sync,Promise}.
workspace.dependencies has been removed. Use workspace.anchoredPackage.dependencies instead.
The Installer class must now return BuildRequest structures instead of BuildDirective[]. This lets you mark that the build must be skipped, and the reason why.
startCacheReport has been removed, and is now part of the output generated by fetchEverything.
forgettableNames & forgettableBufferSize have been removed (the only messages using them have been removed, making the forgettable logs implementation obsolete).
workspace.locator has been removed. You can instead use:
workspace.anchoredLocator to get the locator that's used throughout the dependency tree.
workspace.manifest.version to get the workspace version.
configuration.{packageExtensions,refreshPackageExtensions} have been removed. Use configuration.getPackageExtensions instead.
configuration.normalizePackage now requires a packageExtensions option.
ProjectLookup has been removed. Both Configuration.find and Configuration.findProjectCwd now always do a lockfile lookup.
Installs
Yarn now caches npm version metadata, leading to faster resolution steps and decreased network data usage.
The pnpm linker avoids creating symlinks that lead to loops on the file system, by moving them higher up in the directory structure.
The pnpm linker no longer reports duplicate "incompatible virtual" warnings.
Features
enableOfflineMode is a new setting that, when set, will instruct Yarn to only use the metadata and archives already stored on the local machine rather than download them from the registry. This can be useful when performing local development under network-constrained environments (trains, planes, ...).
yarn run bin now injects the environment variables defined in .env.yarn when spawning a process. This can be configured using the injectEnvironmentFiles variable.
yarn workspaces foreach now automatically enables the yarn workspaces foreach ! --verbose flag in interactive terminals.
Constraints can now be written in JavaScript. See the revamped documentation for more information.
Bugfixes
yarn dlx will no longer report false-positive UNUSED_PACKAGE_EXTENSION warnings
yarn workspace will now set $INIT_CWD to the CLI working directory rather than the workspace root.
Shell
The builtin shell now supports whitespace-only commands.
Compatibility
The patched filesystem now supports FileHandle.readLines.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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.
This PR contains the following updates:
4.0.0-rc.39->4.12.0Release Notes
yarnpkg/berry (yarn)
v4.12.0Compare Source
v4.11.0Compare Source
v4.10.3Compare Source
v4.10.2Compare Source
v4.10.1Compare Source
v4.10.0Compare Source
v4.9.4Compare Source
v4.9.3Compare Source
v4.9.2Compare Source
v4.9.1Compare Source
v4.9.0Compare Source
v4.8.1Compare Source
v4.8.0Compare Source
v4.7.0Compare Source
v4.6.0Compare Source
v4.5.3Compare Source
v4.5.2Compare Source
v4.5.1Compare Source
v4.5.0Compare Source
v4.4.1Compare Source
v4.4.0Compare Source
v4.3.1Compare Source
v4.3.0Compare Source
v4.2.2Compare Source
v4.2.1Compare Source
v4.2.0Compare Source
v4.1.1Compare Source
v4.1.0Compare Source
Tweaks
-,--verboseinyarn workspaces foreach;-vwill now only print the prefixes,-vvwill be necessary to also print the timings.Adds a new
--jsonoption toyarn runwhen called without script nameFixes
node-moduleslinkerlink:dependencies mistreatment as inner workspaces, when they point to a parent folder of a workspaceFixes spurious "No candidates found" errors
Fixes missing executable permissions when using
nodeLinker: pnpmFixes packages being incorrectly flagged as optional
Fixes cache key corruptions due to uncontrolled git merges
Fixes
yarn version apply --all --dry-runmaking unexpected changesFixes
yarn npm loginwhen the remote registry is Verdacciov4.0.2Compare Source
v4.0.1Compare Source
node-moduleslinker when inner workspace depends on outer workspaceyarn npm audit --ignore NUMwhich didn't apply to deprecationsyarn npm audit --jsonwhich didn't print the right output format@yarnpkg/coreyarn explain peer-requirementscommandv4.0.0Compare Source
Major Changes
With Node.js 16's now being End of Life'd, we dropped support for Node.js versions lower than 18.12.
Some important defaults have changed:
yarn initandyarn set versionwill prefer usingpackageManagerrather thanyarnPathwhen possible (when they detectCOREPACK_ROOTin your environment variables).yarn initwill no longer use zero-install by default. You still can enable it, but it should make it easier to start one-of projects without having to rewrite the configuration afterwards.enableGlobalCachenow defaults totrue. If your project uses Zero-Installs, the firstyarn installyou run after migrating to 4.0 will automatically setenableGlobalCache: falsein your local.yarnrc.yml.yarn workspaces foreachnow requires one of--all,--recursive,--since, or--worktreeto be explicitly specified; the previous default was--worktree, but it was rarely what users expected.compressionLevelnow defaults to0rather thanmixed. It's been proved significantly faster on installs, and the size impact was reasonable enough to change the default. Note that it benefits you even if you use Zero-Installs: as per our tests, a zero-compression is actually easier to handle for Git (you can see by yourself with those examples usingcompressionLevel: 0vscompressionLevel: mixed).yarn installafter migrating from 3.6 to 4.0. If you do, it will automatically set the old default (compressionLevel: mixed) in your.yarnrc.ymlfile. You can then remove it whenever you feel ready to actually change the compression settings.All official Yarn plugins are now included by default in the bundle we provide. You no longer need to run
yarn plugin importfor official plugins (you still need to do it for third-party plugins, of course).Yarn's UI during installs has been greatly improved:
node-gypand transitive peer dependency errors) have been removed.yarn rebuildcalls.yarn npm audit.Some settings were renamed or removed:
caFilePathis nowhttpsCaFilePathpreferAggregateCacheInfohas been removed (it's now always on)pnpDataPathhas been removed to adhere to our new PnP specification. For consistency, all PnP files will now be hardcoded to a single value so that third-party tools can implement the PnP specification without relying on the Yarn configuration.The
yarn npm auditcommand has been reimplemented:/-/npm/v1/security/advisories/bulkendpoint.npmAuditRegistrycan be used to temporarily route audit queries to the npm registry.yarn npm audit ! --no-deprecations.Some legacy layers have been sunset:
.pnp.jsfile when migrating.--assume-fresh-projectflag ofyarn inithas been removed.API Changes
The following changes only affect people writing Yarn plugins:
The
ZipFSandZipOpenFSclasses have been moved from@yarnpkg/fslibto@yarnpkg/libzip. They no longer need or accept thelibzipparameter.open,ZIP_CREATE, andZIP_TRUNCATEbindings are no longer needed forZipFSand have also been removed.The
dependenciesfield sent returned byResolver#resolvemust now be the result of aConfiguration#normalizeDependencyMapcall. This change is prompted by a refactoring of how default protocols (ienpm:) are injected into descriptors. The previous implementation caused various descriptors to never be normalized, which made it difficult to know what were the descriptors each function should expect.Similarly, the descriptors returned by
Resolve#getResolutionDependenciesare now expected to be the result ofConfiguration#normalizeDependencycalls.Note that this only applies to the
dependenciesfield; thepeerDependenciesfield is unchanged, as it must only contains semver ranges without any protocol (with an exception forworkspace:, but that's not relevant here).The
Resolve#getResolutionDependenciesfunction must now return an object of arbitrary string keys and descriptor values (instead of a map withDescriptorHashkeys). Those descriptors will be resolved and assigned to the same keys as the initial object. This change allows resolvers to wrap resolution dependencies from other resolvers, which wasn't possible before since it'd have caused the key to change.The
generateLoaderfunction in@yarnpkg/pnpno longer generates the$$SETUP_STATEfunction, it now needs to be present in theloaderpassed to the function.The
getCustomDataKeyfunction inInstallerfrom@yarnpkg/corehas been moved toLinker.renderForm'soptionsargument is now required to enforce that custom streams are always specified.npmConfigUtils.getAuditRegistryno longer takes aManifestas its first argument.The
FetchOptions.skipIntegrityCheckoption has been removed. UseFetchOptions.cacheOptions.skipIntegrityCheckinstead.MapConfigurationValuehas been removed. UsemiscUtils.ToMapValueinstead.Manifest.isManifestFieldCompatibleandManifest.prototype.isCompatibleWith{OS,CPU}have been removed. UseManifest.prototype.getConditionsandstructUtils.isPackageCompatibleinstead.versionUtils.{fetchBase,fetchRoot,fetchChangedFiles}have been moved from@yarnpkg/plugin-versionto@yarnpkg/plugin-git. UsegitUtils.{fetchBase,fetchRoot,fetchChangedFiles}instead.For consistency reasons:
Link{Resolver,Fetcher}have been renamed toPortal{Resolver,Fetcher}RawLink{Resolver,Fetcher}have been renamed toLink{Resolver,Fetcher}FakeFSclasses are now required to implementlutimes{Sync,Promise}.workspace.dependencieshas been removed. Useworkspace.anchoredPackage.dependenciesinstead.The
Installerclass must now returnBuildRequeststructures instead ofBuildDirective[]. This lets you mark that the build must be skipped, and the reason why.startCacheReporthas been removed, and is now part of the output generated byfetchEverything.forgettableNames&forgettableBufferSizehave been removed (the only messages using them have been removed, making the forgettable logs implementation obsolete).workspace.locatorhas been removed. You can instead use:workspace.anchoredLocatorto get the locator that's used throughout the dependency tree.workspace.manifest.versionto get the workspace version.configuration.{packageExtensions,refreshPackageExtensions}have been removed. Useconfiguration.getPackageExtensionsinstead.configuration.normalizePackagenow requires apackageExtensionsoption.ProjectLookuphas been removed. BothConfiguration.findandConfiguration.findProjectCwdnow always do a lockfile lookup.Installs
pnpmlinker avoids creating symlinks that lead to loops on the file system, by moving them higher up in the directory structure.pnpmlinker no longer reports duplicate "incompatible virtual" warnings.Features
enableOfflineModeis a new setting that, when set, will instruct Yarn to only use the metadata and archives already stored on the local machine rather than download them from the registry. This can be useful when performing local development under network-constrained environments (trains, planes, ...).yarn run binnow injects the environment variables defined in.env.yarnwhen spawning a process. This can be configured using theinjectEnvironmentFilesvariable.yarn workspaces foreachnow automatically enables theyarn workspaces foreach ! --verboseflag in interactive terminals.Bugfixes
yarn dlxwill no longer report false-positiveUNUSED_PACKAGE_EXTENSIONwarningsyarn workspacewill now set$INIT_CWDto the CLI working directory rather than the workspace root.Shell
Compatibility
FileHandle.readLines.v4.0.0-rc.53Compare Source
v4.0.0-rc.52Compare Source
v4.0.0-rc.51Compare Source
v4.0.0-rc.50Compare Source
v4.0.0-rc.49Compare Source
v4.0.0-rc.48Compare Source
v4.0.0-rc.47Compare Source
v4.0.0-rc.46Compare Source
v4.0.0-rc.45Compare Source
v4.0.0-rc.44Compare Source
v4.0.0-rc.43Compare Source
v4.0.0-rc.42Compare Source
v4.0.0-rc.41Compare Source
v4.0.0-rc.40Compare Source
Configuration
📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR was generated by Mend Renovate. View the repository job log.