Acknowledging Yarn Check Errors
Using the resolutions field to ignore yarn check errors when you know they’re safe.
Yesterday I was locking down our development and build chain. And while everyone knows you have to lint and test, I’ve only just recently discovered yarn check
. A command that allows you to make sure that the node dependencies you’re working with locally are in sync with the repo.
As a command yarn check
is fairly easy to use. By default it checks that your yarn.lock
matches the ranges resolved from package.json
, and that the versions of the npm packages you’ve got installed locally match those hashed in your yarn.lock
file. If it passes without errors, then your local environment is the same as everyone (including the build machine) else’s!
A challenge, however, is that often you need to ignore warnings. Especially when you’ve insisted on a later version of a package that another depends on. In our case, we we’re using a version of jest beyond that which vue-cli specified. We had tested this setup, but yarn check
(correctly!) threw errors letting us know that our package.json
resulted in something which could not be properly resolved.
To acknowledge
yarn check
errors, you need to use thepackage.json > resolutions
map.
The resolutions key allows you to manually specify that you meant to override the dependent of a dependency, for example:
"resolutions": {
"@vue/cli-plugin-unit-jest/jest": "^24.6.0",
"@vue/cli-plugin-unit-jest/babel-jest": "^24.6.0",
},
Where these entries take the form "dependency/dependencies-dependency/etc...": "version you want"
.
After you’ve specified the resolution, yarn check
will acknowledge the error as a warning (after all, you are working against the semver). But it means you’ll be back to an error code of zero; to the delight of your build machine!
The lessons: yarn check
is a great way to keep node_modules
in sync. Use the package.json > resolutions
field to acknowledge dependency errors as warnings.