diff --git a/packages/README.md b/packages/README.md
index b5296fa094b3d..3937b7adee5a3 100644
--- a/packages/README.md
+++ b/packages/README.md
@@ -1,8 +1,8 @@
-## Managing Packages
+# Managing Packages
This repository uses [lerna] to manage WordPress modules and publish them as packages to [npm].
-### Creating a New Package
+## Creating a New Package
When creating a new package, you need to provide at least the following:
@@ -48,13 +48,17 @@ When creating a new package, you need to provide at least the following:
- Usage example
- `Code is Poetry` logo (`
`)
-### Adding New Dependencies
+## Managing Dependencies
There are two types of dependencies that you might want to add to one of the existing WordPress packages.
-#### Production Dependencies
+### Production Dependencies
-Production dependencies are stored in the `dependencies` section of the package’s `package.json` file. The simplest way to add such a dependency to one of the packages is to run a very convenient [lerna add](https://github.com/lerna/lerna/tree/master/commands/add#readme) command from the root of the project.
+Production dependencies are stored in the `dependencies` section of the package’s `package.json` file.
+
+#### Adding New Dependencies
+
+The simplest way to add a production dependency to one of the packages is to run a very convenient [lerna add](https://github.com/lerna/lerna/tree/master/commands/add#readme) command from the root of the project.
_Example:_
@@ -64,7 +68,33 @@ lerna add lodash packages/a11y
This command adds the latest version of `lodash` as a dependency to the `@wordpress/a11y` package, which is located in `packages/a11y` folder.
-#### Development Dependencies
+#### Removing Existing Dependencies
+
+Removing a dependency from one of the WordPress packages requires some manual work. You need to remove the line in the corresponding `dependencies` section of the `package.json` file.
+
+_Example:_
+
+```diff
++++ b/packages/scripts/package.json
+@@ -43,7 +43,6 @@
+ "check-node-version": "^3.1.1",
+ "cross-spawn": "^5.1.0",
+ "eslint": "^5.16.0",
+- "jest": "^24.7.1",
+ "jest-puppeteer": "^4.0.0",
+ "minimist": "^1.2.0",
+ "npm-package-json-lint": "^3.6.0",
+```
+
+Next, you need to run `npm install` in the root of the project to ensure that `package-lock.json` file gets properly regenerated.
+
+#### Updating Existing Dependencies
+
+This is the most confusing part of working with [lerna] which causes a lot of hassles for contributors. The most successful strategy so far is to do the following:
+ 1. First, remove the existing dependency as described in the previous section.
+ 2. Next, add the same dependency back as described in the first section of this chapter. This time it wil get the latest version applied unless you enforce a different version explicitly.
+
+### Development Dependencies
In contrast to production dependencies, development dependencies shouldn't be stored in individual WordPress packages. Instead they should be installed in the project's `package.json` file using the usual `npm install` command. In effect, all development tools are configured to work with every package at the same time to ensure they share the same characteristics and integrate correctly with each other.
@@ -76,7 +106,7 @@ npm install glob --save-dev
This commands adds the latest version of `glob` as a development dependency to the `package.json` file. It has to be executed from the root of the project.
-### Maintaining Changelogs
+## Maintaining Changelogs
In maintaining dozens of npm packages, it can be tough to keep track of changes. To simplify the release process, each package includes a `CHANGELOG.md` file which details all published releases and the unreleased ("Master") changes, if any exist.
@@ -106,13 +136,13 @@ When in doubt, refer to [Semantic Versioning specification](https://semver.org/)
If you are publishing new versions of packages, note that there are versioning recommendations outlined in the [Gutenberg Release Process document](https://github.com/WordPress/gutenberg/blob/master/docs/contributors/release.md) which prescribe _minimum_ version bumps for specific types of releases. The chosen version should be the greater of the two between the semantic versioning and Gutenberg release minimum version bumps.
-### Releasing Packages
+## Releasing Packages
Lerna automatically releases all outdated packages. To check which packages are outdated and will be released, type `npm run publish:check`.
If you have the ability to publish packages, you _must_ have [2FA enabled](https://docs.npmjs.com/getting-started/using-two-factor-authentication) on your [npm account][npm].
-#### Before Releasing
+### Before Releasing
Confirm that you're logged in to [npm], by running `npm whoami`. If you're not logged in, run `npm adduser` to login.
@@ -128,7 +158,7 @@ If you're publishing a new package, ensure that its `package.json` file contains
You can check your package configs by running `npm run lint-pkg-json`.
-#### Development Release
+### Development Release
Run the following command to release a dev version of the outdated packages.
@@ -140,7 +170,7 @@ Lerna will ask you which version number you want to choose for each package. For
Lerna will then publish to [npm], commit the `package.json` changes and create the git tags.
-#### Production Release
+### Production Release
To release a production version for the outdated packages, run the following command: