Skip to content

How to upgrade node module of the lerna’s subpackage

I started using lerna to be able to install all node modules for all sub packages using a single command. At the moment I do not use any other lerna features except lerna bootstrap. My lerna.json:

{
  "lerna": "3.22.0",
  "npmClient": "yarn",
  "packages": [
    "package-a",
    "package-b"
  ],
  "version": "1.0.0"
}

my root package.json:

{
  "name": "test",
  "private": true,
  "version": "1.0.0",
  "scripts": {
    "postinstall": "lerna bootstrap"
  },
  "dependencies": {
    "lerna": "^3.22.1"
  }
}

my package-a‘s package.json:

{
  "name": "package-a",
  "version": "1.0.0",
  "private": true,
  "dependencies": {
    "moment": "2.22.0"
  }
}

my package-b‘s package.json:

{
  "name": "package-b",
  "version": "1.0.0",
  "private": true,
  "dependencies": {
    "package-a": "1.0.0",
    "moment": "2.22.0"
  }
}

i want to upgrade moment in the package-b. if i run yarn upgrade moment --latest in the package-b folder i got the following error:

yarn upgrade v1.22.5
[1/4] 🔍  Resolving packages...
error Received malformed response from registry for "package-a". The registry may be down.
info Visit https://yarnpkg.com/en/docs/cli/upgrade for documentation about this command.

if i run npx lerna --scope package-b exec -- "yarn upgrade moment --latest" in the root folder i get the following error:

lerna notice cli v3.22.1
lerna notice filter including "package-b"
lerna info filter [ 'package-b' ]
lerna info Executing command in 1 package: "yarn upgrade moment --latest"
yarn upgrade v1.22.5
[1/4] 🔍  Resolving packages...
error Received malformed response from registry for "package-a". The registry may be down.
info Visit https://yarnpkg.com/en/docs/cli/upgrade for documentation about this command.
lerna ERR! yarn upgrade moment --latest exited 1 in 'package-b'
lerna ERR! yarn upgrade moment --latest exited 1 in 'package-b'

How should I properly upgrade node module in the lerna’s sub-package?

Answer

Because both of your packages are private the npm repository can’t find them during the upgrade of the moment library. Also the lerna package is currently largely unmaintained.

There exists a workaround. Temporally delete the "package-a": "1.0.0", line from your package-b.json file.

Updated package-b/package.json file:

{
  "name": "package-b",
  "version": "1.0.0",
  "private": true,
  "dependencies": {
    "moment": "2.22.0"
  }
}

Now run:

cd package-b && yarn upgrade moment --latest && cd ..

Then put the "package-a": "1.0.0", line back to your package-b.json file.