Snapped To
Pin the version of all dependencies in this group to follow the versions used by the other packages named within the snapTo
array.
Examples
Example: Fix React Native version mismatch
Add a Snapped To Version Group which allows some of the packages in your monorepo to “follow” other packages in terms of which versions they should use.
In this example we want our Mobile App package to be the single source of truth for what the versions of react
and react-native
should be. Every other package will be required to use the same version it does.
Here is the Version Group configuration to do it:
- An optional label can be added to document the rule.
- The dependencies array defines the names of the dependencies we want to target.
- The snapTo array lists the
name
properties of the locally developed package.json files which should be searched for a version ofreact
orreact-native
.
Configuration
snapTo
Required- The values refer to the
name
property of the package.json files developed in your monorepo. - Multiple values can be added to provide fallback packages to try in the event that the dependency is not present in the earlier packages in the array.
dependencies
Optional- An array of names of dependencies you’ve installed or otherwise reference in your package.json files.
- If omitted, the default behaviour is to match every dependency.
- The strings can be any combination of exact matches or minimatch glob patterns:
dependencyTypes
Optional- When set, only dependencies present in the named locations will be assigned to this group.
- If omitted, the default behaviour is to match dependencies everywhere they are found.
- Negated types are also supported, so a value of
["!dev", "!prod"]
would assign everything exceptdependencies
anddevDependencies
to this group.
Default values
Value | Property in package.json |
---|---|
dev | devDependencies |
local | version |
overrides | overrides |
peer | peerDependencies |
pnpmOverrides | pnpm.overrides |
prod | dependencies |
resolutions | resolutions |
specifierTypes
Optional- When set, only dependencies whose version specifier matches the named formats will be assigned to this group.
- If omitted, the default behaviour is to match all dependencies.
- Negated types are also supported, so a value of
["!latest", "!file"]
would assign everything except specifiers of the format*
andfile:path/to/package.tgz
to this group.
Available values
Value | Example |
---|---|
alias | npm:foo@1.2.3 |
exact | 8.1.2 |
file | file:path/to/foo.tgz , file:path/to/directory |
hosted-git | git+https://github.com/user/foo , git+ssh://git@notgithub.com/user/foo#1.2.3 etc |
latest | * or latest |
range | ^4.1.1 , >=5.0.0 , ~1.2.1 etc |
tag | alpha , canary |
unsupported | $typescript , 1.typo.wat |
url | https://server.com/foo.tgz |
workspace-protocol | workspace:* , workspace:~ , workspace:^ |
label
Optional- A short name or description displayed as a header in syncpack’s output.
- If a label is not set then eg. “Version Group 3” will be used instead.
packages
Optional- An array of strings which should match the
name
properties of your package.json files. - If omitted, the default behaviour is to match every package.
- Negated types are also supported, so a value of
["!my-client", "!my-server"]
would assign everything except the packagesmy-client
andmy-server
to this group. - The strings can be any combination of exact matches or minimatch glob patterns: