更新日志
Yarn now accepts sponsors! Please take a look at our OpenCollective and GitHub Sponsors pages for more details.
Master
Features in master
can be tried out by running yarn set version from sources
in your project.
- Fixes
preferInteractive
forcing interactive mode in non-TTY environments. node-modules
linker now honors user-defined symlinks for<workspace>/node_modules
directories
4.1.0
-
Tweaks
-,--verbose
inyarn workspaces foreach
;-v
will now only print the prefixes,-vv
will be necessary to also print the timings. -
Adds a new
--json
option toyarn run
when called without script name -
Fixes
node-modules
linkerlink:
dependencies mistreatment as inner workspaces, when they point to a parent folder of a workspace -
Fixes spurious "No candidates found" errors
-
Fixes missing executable permissions when using
nodeLinker: pnpm
-
Fixes packages being incorrectly flagged as optional
-
Fixes cache key corruptions due to uncontrolled git merges
-
Fixes
yarn version apply --all --dry-run
making unexpected changes -
Fixes
yarn npm login
when the remote registry is Verdaccio
4.0.1
- Fixes creation of symlinks for
node-modules
linker when inner workspace depends on outer workspace - Fixes progress bars when the terminal is too large
- Fixes crashes while running Yarn within Docker within GitHub Actions
- Fixes
yarn npm audit --ignore NUM
which didn't apply to deprecations - Fixes
yarn npm audit --json
which didn't print the right output format - Fixes an incorrect type export in
@yarnpkg/core
- Implements back the
yarn explain peer-requirements
command
4.0.0
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 init
andyarn set version
will prefer usingpackageManager
rather thanyarnPath
when possible (when they detectCOREPACK_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 totrue
. If your project uses Zero-Installs, the firstyarn install
you run after migrating to 4.0 will automatically setenableGlobalCache: false
in your local.yarnrc.yml
.
- As a result,
-
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 to0
rather 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: 0
vscompressionLevel: 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.
- To avoid making the upgrade too disruptive, Yarn will check whether Zero-Installs are enabled the first time you run
-
-
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. - The Yarn version is now displayed on installs to help us investigate issues when reported as screenshots.
- Deprecation checks have been moved to
yarn npm audit
.
-
Some settings were renamed or removed:
caFilePath
is nowhttpsCaFilePath
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
--no-deprecations
.
- The audit registry must now implement the
-
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 ofyarn init
has been removed.
API Changes
The following changes only affect people writing Yarn plugins:
-
The
ZipFS
andZipOpenFS
classes have been moved from@yarnpkg/fslib
to@yarnpkg/libzip
. They no longer need or accept thelibzip
parameter.- Reading the zip archives is now done on the Node.js side for performance; as a result, the
open
,ZIP_CREATE
, andZIP_TRUNCATE
bindings are no longer needed forZipFS
and have also been removed.
- Reading the zip archives is now done on the Node.js side for performance; as a result, the
-
The
dependencies
field sent returned byResolver#resolve
must now be the result of aConfiguration#normalizeDependencyMap
call. 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#getResolutionDependencies
are now expected to be the result ofConfiguration#normalizeDependency
calls. -
Note that this only applies to the
dependencies
field; thepeerDependencies
field is unchanged, as it must only contains semver ranges without any protocol (with an exception forworkspace:
, 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 withDescriptorHash
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 theloader
passed to the function. -
The
getCustomDataKey
function inInstaller
from@yarnpkg/core
has been moved toLinker
. -
renderForm
'soptions
argument is now required to enforce that custom streams are always specified. -
npmConfigUtils.getAuditRegistry
no longer takes aManifest
as its first argument. -
The
FetchOptions.skipIntegrityCheck
option has been removed. UseFetchOptions.cacheOptions.skipIntegrityCheck
instead. -
MapConfigurationValue
has been removed. UsemiscUtils.ToMapValue
instead. -
Manifest.isManifestFieldCompatible
andManifest.prototype.isCompatibleWith{OS,CPU}
have been removed. UseManifest.prototype.getConditions
andstructUtils.isPackageCompatible
instead. -
versionUtils.{fetchBase,fetchRoot,fetchChangedFiles}
have been moved from@yarnpkg/plugin-version
to@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}
-
FakeFS
classes are now required to implementlutimes{Sync,Promise}
. -
workspace.dependencies
has been removed. Useworkspace.anchoredPackage.dependencies
instead. -
The
Installer
class must now returnBuildRequest
structures instead ofBuildDirective[]
. 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 byfetchEverything
. -
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. Useconfiguration.getPackageExtensions
instead. -
configuration.normalizePackage
now requires apackageExtensions
option. -
ProjectLookup
has been removed. BothConfiguration.find
andConfiguration.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 theinjectEnvironmentFiles
variable.yarn workspaces foreach
now automatically enables the--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-positiveUNUSED_PACKAGE_EXTENSION
warningsyarn workspace
will now set$INIT_CWD
to the CLI working directory rather than the workspace root.