Keep your package.json version requirements satisfied
$ npm install satisfied --save-dev
The best way to use satisfied
is in your package.json scripts:
{
"scripts": {
"satisfied": "satisfied --fix"
}
}
$ npm run satisfied
satisfied --fix && node index.js
satisfied --exact && mocha
Fixes:
node_modules
that do not satisfypackage.json
requirementsnode_modules
that do not satisfy peerspackage.json
versions that do not satisfy peers
Installs the latest exact published version that satisfies the current package.json range and every peer's range. If this silver-bullet-version does not exist satisfied
throws. There is simply no version in existence that satisfies all the required ranges.
How?
- Gathers ranges from
package.json
and peers - Gets all available versions from NPM
- Filters only versions that satisfy all ranges
- Reduces the greatest version
- Installs that exact version
- Updates package.json and/or yarn.lock
Review and commit the changes 🍻
Usage: satisfied [options]
Options:
--skip-invalid, -I Skips checking invalid ranges (e.g. github urls) [boolean]
--exact, -e Check and fix using exact versions [boolean]
--fix, -f Install modules that satisfy package.json
[choices: "npm", "yarn"]
--ignore, -i RegExp matching modules names to ignore [string]
--no-deps, -D Exclude dependencies [boolean]
--no-devs, -V Exclude devDependencies [boolean]
--no-peers, -P Exclude peerDependencies [boolean]
--debug, -d Output more info [boolean]
-h, --help Show help [boolean]
-v, --version Show version number [boolean]
Examples:
satisfied --fix Fix issues using npm
satisfied --fix yarn Fix issues using yarn
satisfied --ignore "babel-plugin-" Ignore babel-plugins
satisfied --no-peers Exclude peerDependencies
Having a package.json
or yarn.lock
means nothing if it isn't satisfied by the modules that are actually installed.
- Neither
npm
noryarn
have a--fix
command - Neither
npm
noryarn
respects peer dependency versions - CI services cache your modules, passing your tests with the wrong deps installed
- You build and publish packages on outdated deps
- You switch branches and have no idea that the updated package.json isn't satisfied with your node_modules