Synchronise Node.js version in monorepo
Ensure engines.node version is identical in every package.
1. Add a custom type
I've chosen a name of nodeEngine but it can be anything you like.
{ "customTypes": { "nodeEngine": { "path": "engines.node", "strategy": "version" } }}2. Look for mismatches
Perform a one-off check for every usage of engines.node in your monorepo.
syncpack list --dependency-types nodeEngineIf the versions are not identical, they can be synchronised to all use the highest of the semver versions currently in use.
syncpack fix-mismatches --dependency-types nodeEngine3. Track them in future
Add your new custom type to your dependencyTypes at the root level. It is included in the list of all possible dependency types.
{ "customTypes": { "nodeEngine": { "path": "engines.node", "strategy": "version" } },
"dependencyTypes": [ "dev" "nodeEngine" "peer" "prod" ]}Now when you run any syncpack command, engines.node will also be checked.
syncpack list4. Relax the rules (optional)
If you don't want the Node.js version to be identical in every package but do want them all to be compatible with each other, you can use a Same Range Version Group.
Note that you do have to list your customType in dependencyTypes for it to work within versionGroups#dependencyTypes or semverGroups#dependencyTypes.
{ "customTypes": { "nodeEngine": { "path": "engines.node", "strategy": "version" } },
"dependencyTypes": [ "dev" "nodeEngine" "peer" "prod" ],
"versionGroups": [ { "dependencyTypes": ["nodeEngine"], "policy": "sameRange" } ]}