Lerna Update Wizard
Command line interface for simplifying the process of bulk updating dependencies across multiple Lerna or Yarn Workspace packages.
Install
$ yarn add --dev lerna-update-wizard
Or via NPM:
$ npm install --save-dev lerna-update-wizard
If installed globally, it can be used independently on any project:
$ yarn global add lerna-update-wizard
Usage
Simply run the lernaupdate
command in the root of a Lerna-based project:
$ lernaupdate
Or from the outside by specifying the path to the project:
$ lernaupdate ~/projects/my-lerna-project
Or run it using npx
$ npx lerna-update-wizard
Features
Update dependencies across packages
- Search for and select the dependency to upgrade
- Select the packages in which you wish to perform the upgrade
- Pick the desired version to be installed for the dependency
![Update dependency Update dependency](https://github.com/Anifacted/lerna-update-wizard/raw/HEAD/public/update.gif?raw=true)
Add new dependencies across packages
- Enter the name of a dependency not already in your project
- Select the packages in which to add the dependency
- Pick the desired version to be installed for the dependency
- When prompted, specify dependency type for each package (normal/dev/peer)
![Add dependency Add packages](https://github.com/Anifacted/lerna-update-wizard/raw/HEAD/public/add.gif?raw=true)
Deduplicate dependencies across packages
- Run the command with the
--dedupe
option - Only dependencies installed with 2 or more differing versions will be presented
- Complete the flow like normal (described above)
![Deduplicate dependency Deduplicate packages](https://github.com/Anifacted/lerna-update-wizard/raw/HEAD/public/dedupe.gif?raw=true)
Add/Update multiple dependencies in one session
You can batch updates for multiple dependencies into one session. Choose + Add another
after you've specified the details for the first update task.
![Confirm installation Add packages](https://github.com/Anifacted/lerna-update-wizard/raw/HEAD/public/multiple-jobs.png?raw=true)
Note: Currently not supported in --noninteractive
mode.
Auto-generate Git branch & commit
-
After installation, choose whether or not you'd like to generate a Git branch for your changes
-
Then choose whether or not you'd like to make a separate Git commit for your changes.
A nice commit message with details about the update version range for each affected package will be generated for you.
![Git Git](https://github.com/Anifacted/lerna-update-wizard/raw/HEAD/public/git.gif?raw=true)
Non-interactive mode
The script can run without prompting you for input. Simply specify the --non-interactive
flag:
$ lernaupdate --non-interactive --dependency lodash@4.2.1 ./my-project
The script will tell you if you need to specify any additional input flags based on the state of your mono repo.
For instance, you might need/wish to include information about which packages to affect and which type of installation to perform if the dependency is a first-time install:
$ lernaupdate --non-interactive \
--dependency lodash@4.2.1 \
--packages packages/utils,packages/tools \
--new-installs-mode dev \
./my-project
Note: Git features are not available for --non-interactive
mode.
Yarn support
Lerna Update Wizard will automatically detect the package manager used for each package and use the appropriate one for installing the dependency.
Note: If the project root directory contains a yarn.lock
file, Yarn will be used to install all packages, in order to support Yarn Workspaces.
NPM
![NPM install NPM install](https://github.com/Anifacted/lerna-update-wizard/raw/HEAD/public/npm.gif?raw=true)
Yarn
![Yarn install Yarn install](https://github.com/Anifacted/lerna-update-wizard/raw/HEAD/public/yarn.gif?raw=true)
Yarn Workspaces & lazy installation
When using Yarn Workspaces for your mono-repo, only a single installation is required in the top-level directory after changing a dependency in the package.json file for one or more sub-packages.
To achieve this single "lazy" install, which can significantly speed up the install duration, you can specify the --lazy
flag.
If not specified, you will be prompted with the option to enable it at runtime, whenever use of Yarn Workspaces is detected (unless in non-interactive mode).
Notes
Lerna Update Wizard takes Lerna's packages
config parameter into account if specified in lerna.json. This means that if you have your packages located in a directory other than packages/
, this tool will still work, as long as their parent directory is specified.