Consistent dependency versions in large JavaScript Monorepos.
https://jamiemason.github.io/syncpack
Note
This is the README for v14-alpha, a Rust rewrite which is due to replace v13.x.x
npm install --save-dev syncpack@alpha
All command line options can be combined to target packages and dependencies in multiple ways.
Ensure that multiple packages requiring the same dependency define the same version, so that every package requires eg. react@17.0.2
, instead of a combination of react@17.0.2
, react@16.8.3
, and react@16.14.0
.
# Find all issues in "dependencies" or "devDependencies" syncpack lint --dependency-types prod,dev # Only lint issues in "react" specifically syncpack lint --dependencies react # Look for issues in dependencies containing "react" in the name syncpack lint --dependencies '**react**' # Find issues in scoped packages only syncpack lint --dependencies '@types/**' # Find issues everywhere except "peerDependencies" syncpack lint --dependency-types '!peer' # Only look for issues where an exact version is used (eg "1.2.3") syncpack lint --specifier-types exact # Sort dependencies by how many times they are used syncpack lint --sort count # See more examples syncpack lint --help # See a short summary of options syncpack lint -h
Fix every autofixable issue found by syncpack lint
.
# Only fix issues in dependencies and devDependencies syncpack fix --dependency-types prod,dev # Only fix inconsistencies with exact versions (eg "1.2.3") syncpack fix --specifier-types exact # Only fix issues in "react" specifically syncpack fix --dependencies react # See more examples syncpack fix --help # See a short summary of options syncpack fix -h
Update packages to the latest versions from the npm registry, wherever they are in your monorepo.
Semver range preferences are preserved when updating.
# Accept any update in latest (x.x.x) syncpack update --target latest # Only update minor versions (1.x.x) syncpack update --target minor # Only update patch versions (1.2.x) syncpack update --target patch # Check for outdated dependencies in one package syncpack update --check --source 'packages/pingu/package.json' # Update dependencies and devDependencies in the whole monorepo syncpack update --dependency-types dev,prod # Only update dependencies with a semver range specifier (^, ~, etc.) syncpack update --specifier-types range # Update dependencies where name exactly matches 'react' syncpack update --dependencies 'react' # Update dependencies where name contains 'react' syncpack update --dependencies '**react**' # Update dependencies with the '@aws-sdk' scope syncpack update --dependencies '@aws-sdk/**' # See more examples syncpack update --help # See a short summary of options syncpack update -h
Organise package.json files according to a conventional format, where fields appear in a predictable order and nested fields are ordered alphabetically. Shorthand properties are used where available, such as the "repository"
and "bugs"
fields.
# Fix every formatting issue in the monorepo syncpack format # List all formatting issues in the monorepo syncpack format --check # Check the formatting of one package syncpack format --check --source 'packages/pingu/package.json' # See more examples syncpack format --help # See a short summary of options syncpack format -h
Query and inspect all dependencies in your project, both valid and invalid.
# Sort dependencies by how many times they are used syncpack list --sort count # Show every instance of each dependency, not just their names syncpack list --show instances # Show dependencies ignored in your syncpack config syncpack list --show ignored # Show highest level of detail syncpack list --show all # Choose only some values syncpack list --show hints,statuses # List all "peerDependencies" syncpack list --dependency-types peer # List all types packages syncpack list --dependencies '@types/**' # List instances of an exact version being used as a peer dependency syncpack list --specifier-types exact --show instances --dependency-types peer # See more examples syncpack list --help # See a short summary of options syncpack list -h
Output the state of every instance of every dependency as a JSON object, one per line. This command is best used with tools like jq
for filtering and processing.
# Output all dependencies as JSON syncpack json # Output only AWS SDK dependencies syncpack json --dependencies '@aws-sdk/**' # Count dependencies by type syncpack json | jq -r '.dependencyType' | sort | uniq -c # See more examples syncpack json --help # See a short summary of options syncpack json -h