Same Range
Relax syncpack to ensure that all versions have semver ranges which all satisfy each other, instead of having to be identical.
Examples
Example: Check that a dependency's semver ranges always match
Add a Same Range Version Group which allows local packages installed in devDependencies
or peerDependencies
to use different semver ranges, as long as they all match the local package version.
- An optional label can be added to document the rule.
- The dependencies array defines the names of the dependencies we want to target.
- dependencyTypes results in these dependencies only being targeted by this group when they are located in
devDependencies
orpeerDependencies
. - The policy of sameRange states that these dependencies are considered valid if every range matches the others.
Configuration
policy
RequiredCurrently the only custom policy in syncpack is “sameRange”, which is what causes this behaviour to be applied to a Version Group.
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: