Update a yarn dependency across a project/workspace & sub-dependencies.
yu my-dependency 0.5.1 # my-dependency@~0.5.1
yu my-dependency ^0.5.1 # my-dependency@^0.5.1 (no matter if it used to be caret or tilde)
yu my-dependency ~0.5.1 # my-dependency@^0.5.1 (no matter if it used to be caret or tilde)
yu my-dependency # update to current latest version
yu --all-dependencies # update all `dependencies` to the latest version
yu --all-dev-dependencies # update all `devDependencies` to the latest version
yu -h # Output all available optionsyarn global add yarn-update-dependencyRunning this command will:
- Update the specified package to the specified version in the
package.json - If run inside of a Yarn Workspace, it will also update all
package.jsonin all workspace packages to the same version. - It will then remove all entries for this package from the
yarn.lockfile - Finally, it will run
yarn installto update the dependencies
This package solves two problems.
First, it can be annoying to keep a dependency in sync in a Yarn Workspace. You'll often want to have the same dependency of a package in all workspace packages, which requires you to manually keep this in sync everywhere. With the help of yu, the version will be the same in all workspace packages.
Second, it can be tricky to actually update a specific version in Yarn. Just updating the version in the package.json and running yarn can lead to the package being installed multiple times - e.g. if a dependency also relies on this package.
Take this structure:
- my-app
- [email protected]
- my-dependency-b@^2.0.0
- my-dependency-b@~2.0.1
- [email protected]
Now you might end up with these packages installed:
Now, you want to update my-dependency-b to 2.1.0. The version range specified in my-dependency-a allows for that, so you might just update this like this:
- my-app
- [email protected]
- my-dependency-b@^2.0.0
- my-dependency-b@~2.1.0
- [email protected]
And run yarn again. However, this will NOT replace the previously installed version, but actually result in this:
Which is usually not what you want. The only way to really ensure that all sub-dependencies are also updated (as far as their version ranges allow), is to remove the entry from the yarn.lock file first - which is what this package does for you.