diff --git a/lib/manager/npm/extract/__snapshots__/index.spec.ts.snap b/lib/manager/npm/extract/__snapshots__/index.spec.ts.snap
index c2509d138f8ed6e930e8eb015c534a1d30ef5177..acfa5e2ed80e6af26a7fec670f9100af889c9380 100644
--- a/lib/manager/npm/extract/__snapshots__/index.spec.ts.snap
+++ b/lib/manager/npm/extract/__snapshots__/index.spec.ts.snap
@@ -13,7 +13,7 @@ Object {
   ],
   "ignoreNpmrcFile": undefined,
   "lernaClient": undefined,
-  "lernaDir": undefined,
+  "lernaJsonFile": undefined,
   "lernaPackages": undefined,
   "npmLock": undefined,
   "npmrc": undefined,
@@ -135,7 +135,7 @@ Object {
   ],
   "ignoreNpmrcFile": undefined,
   "lernaClient": undefined,
-  "lernaDir": undefined,
+  "lernaJsonFile": undefined,
   "lernaPackages": undefined,
   "npmLock": undefined,
   "npmrc": undefined,
@@ -297,7 +297,7 @@ Object {
   ],
   "ignoreNpmrcFile": undefined,
   "lernaClient": undefined,
-  "lernaDir": undefined,
+  "lernaJsonFile": undefined,
   "lernaPackages": undefined,
   "npmLock": undefined,
   "npmrc": undefined,
@@ -345,7 +345,7 @@ Object {
   ],
   "ignoreNpmrcFile": undefined,
   "lernaClient": undefined,
-  "lernaDir": undefined,
+  "lernaJsonFile": undefined,
   "lernaPackages": undefined,
   "npmLock": undefined,
   "npmrc": undefined,
@@ -404,7 +404,7 @@ Object {
   ],
   "ignoreNpmrcFile": undefined,
   "lernaClient": undefined,
-  "lernaDir": undefined,
+  "lernaJsonFile": undefined,
   "lernaPackages": undefined,
   "npmLock": undefined,
   "npmrc": undefined,
@@ -457,7 +457,7 @@ Object {
   ],
   "ignoreNpmrcFile": undefined,
   "lernaClient": undefined,
-  "lernaDir": undefined,
+  "lernaJsonFile": undefined,
   "lernaPackages": undefined,
   "npmLock": undefined,
   "npmrc": undefined,
@@ -592,7 +592,7 @@ Object {
   ],
   "ignoreNpmrcFile": undefined,
   "lernaClient": "npm",
-  "lernaDir": ".",
+  "lernaJsonFile": "lerna.json",
   "lernaPackages": undefined,
   "npmLock": undefined,
   "npmrc": undefined,
@@ -727,7 +727,7 @@ Object {
   ],
   "ignoreNpmrcFile": undefined,
   "lernaClient": "yarn",
-  "lernaDir": ".",
+  "lernaJsonFile": "lerna.json",
   "lernaPackages": undefined,
   "npmLock": undefined,
   "npmrc": undefined,
@@ -862,7 +862,7 @@ Object {
   ],
   "ignoreNpmrcFile": undefined,
   "lernaClient": undefined,
-  "lernaDir": undefined,
+  "lernaJsonFile": undefined,
   "lernaPackages": undefined,
   "npmLock": undefined,
   "npmrc": undefined,
@@ -883,7 +883,7 @@ Object {
   "deps": Array [],
   "ignoreNpmrcFile": undefined,
   "lernaClient": "npm",
-  "lernaDir": ".",
+  "lernaJsonFile": "lerna.json",
   "lernaPackages": undefined,
   "npmLock": undefined,
   "npmrc": undefined,
@@ -1020,7 +1020,7 @@ Object {
   ],
   "ignoreNpmrcFile": undefined,
   "lernaClient": "npm",
-  "lernaDir": ".",
+  "lernaJsonFile": "lerna.json",
   "lernaPackages": undefined,
   "npmLock": undefined,
   "npmrc": undefined,
@@ -1041,7 +1041,7 @@ Object {
   "deps": Array [],
   "ignoreNpmrcFile": undefined,
   "lernaClient": "npm",
-  "lernaDir": ".",
+  "lernaJsonFile": "lerna.json",
   "lernaPackages": undefined,
   "npmLock": undefined,
   "npmrc": undefined,
@@ -1064,7 +1064,7 @@ Object {
   "deps": Array [],
   "ignoreNpmrcFile": undefined,
   "lernaClient": undefined,
-  "lernaDir": undefined,
+  "lernaJsonFile": undefined,
   "lernaPackages": undefined,
   "npmLock": undefined,
   "npmrc": undefined,
@@ -1201,7 +1201,7 @@ Object {
   ],
   "ignoreNpmrcFile": undefined,
   "lernaClient": undefined,
-  "lernaDir": undefined,
+  "lernaJsonFile": undefined,
   "lernaPackages": undefined,
   "npmLock": undefined,
   "npmrc": undefined,
diff --git a/lib/manager/npm/extract/__snapshots__/monorepo.spec.ts.snap b/lib/manager/npm/extract/__snapshots__/monorepo.spec.ts.snap
index bddedcf16053a8fe7212230a25d574be12d25062..9f2ae33089c893333341b6871f91e03ad11fcf38 100644
--- a/lib/manager/npm/extract/__snapshots__/monorepo.spec.ts.snap
+++ b/lib/manager/npm/extract/__snapshots__/monorepo.spec.ts.snap
@@ -17,7 +17,7 @@ Array [
         "depName": "foo",
       },
     ],
-    "lernaDir": ".",
+    "lernaJsonFile": "lerna.json",
     "lernaPackages": Array [
       "packages/*",
     ],
@@ -39,7 +39,7 @@ Array [
       },
     ],
     "lernaClient": undefined,
-    "lernaDir": ".",
+    "lernaJsonFile": "lerna.json",
     "npmLock": undefined,
     "packageFile": "packages/a/package.json",
     "packageJsonName": "@org/a",
@@ -47,7 +47,7 @@ Array [
   },
   Object {
     "lernaClient": undefined,
-    "lernaDir": ".",
+    "lernaJsonFile": "lerna.json",
     "npmLock": undefined,
     "packageFile": "packages/b/package.json",
     "packageJsonName": "@org/b",
@@ -75,7 +75,7 @@ Array [
         "depName": "foo",
       },
     ],
-    "lernaDir": ".",
+    "lernaJsonFile": "lerna.json",
     "lernaPackages": Array [
       "packages/*",
     ],
@@ -98,7 +98,7 @@ Array [
       },
     ],
     "lernaClient": undefined,
-    "lernaDir": ".",
+    "lernaJsonFile": "lerna.json",
     "npmLock": undefined,
     "packageFile": "packages/a/package.json",
     "packageJsonName": "@org/a",
@@ -106,7 +106,7 @@ Array [
   },
   Object {
     "lernaClient": undefined,
-    "lernaDir": ".",
+    "lernaJsonFile": "lerna.json",
     "npmLock": undefined,
     "packageFile": "packages/b/package.json",
     "packageJsonName": "@org/b",
@@ -119,7 +119,7 @@ exports[`manager/npm/extract .extractPackageFile() uses yarn workspaces package
 Array [
   Object {
     "lernaClient": "yarn",
-    "lernaDir": ".",
+    "lernaJsonFile": "lerna.json",
     "lernaPackages": Array [
       "oldpackages/*",
     ],
@@ -130,7 +130,7 @@ Array [
   },
   Object {
     "lernaClient": "yarn",
-    "lernaDir": ".",
+    "lernaJsonFile": "lerna.json",
     "npmLock": undefined,
     "packageFile": "packages/a/package.json",
     "packageJsonName": "@org/a",
@@ -138,7 +138,7 @@ Array [
   },
   Object {
     "lernaClient": "yarn",
-    "lernaDir": ".",
+    "lernaJsonFile": "lerna.json",
     "npmLock": undefined,
     "packageFile": "packages/b/package.json",
     "packageJsonName": "@org/b",
@@ -156,7 +156,7 @@ Array [
   Object {
     "hasYarnWorkspaces": true,
     "lernaClient": undefined,
-    "lernaDir": undefined,
+    "lernaJsonFile": undefined,
     "npmLock": undefined,
     "packageFile": "packages/a/package.json",
     "packageJsonName": "@org/a",
@@ -164,7 +164,7 @@ Array [
   },
   Object {
     "lernaClient": undefined,
-    "lernaDir": undefined,
+    "lernaJsonFile": undefined,
     "npmLock": undefined,
     "packageFile": "packages/b/package.json",
     "packageJsonName": "@org/b",
diff --git a/lib/manager/npm/extract/index.ts b/lib/manager/npm/extract/index.ts
index bd5d442b65a4514dd4a50ddf5c24853bde1378de..f56f63a39a27e2534ff0faff89119eed4e69637c 100644
--- a/lib/manager/npm/extract/index.ts
+++ b/lib/manager/npm/extract/index.ts
@@ -1,5 +1,4 @@
 import is from '@sindresorhus/is';
-import { dirname } from 'upath';
 import validateNpmPackageName from 'validate-npm-package-name';
 import { getAdminConfig } from '../../../config/admin';
 import { CONFIG_VALIDATION } from '../../../constants/error-messages';
@@ -124,7 +123,7 @@ export async function extractPackageFile(
     yarnrc = (await readLocalFile(yarnrcFileName, 'utf8')) || undefined;
   }
 
-  let lernaDir: string;
+  let lernaJsonFile: string;
   let lernaPackages: string[];
   let lernaClient: 'yarn' | 'npm';
   let hasFileRefs = false;
@@ -134,16 +133,17 @@ export async function extractPackageFile(
     useWorkspaces?: boolean;
   };
   try {
-    const lernaJsonFileName = getSiblingFileName(fileName, 'lerna.json');
-    lernaJson = JSON.parse(await readLocalFile(lernaJsonFileName, 'utf8'));
+    lernaJsonFile = getSiblingFileName(fileName, 'lerna.json');
+    lernaJson = JSON.parse(await readLocalFile(lernaJsonFile, 'utf8'));
   } catch (err) /* istanbul ignore next */ {
     logger.warn({ err }, 'Could not parse lerna.json');
   }
   if (lernaJson && !lernaJson.useWorkspaces) {
-    lernaDir = dirname(fileName);
     lernaPackages = lernaJson.packages;
     lernaClient =
       lernaJson.npmClient === 'yarn' || lockFiles.yarnLock ? 'yarn' : 'npm';
+  } else {
+    lernaJsonFile = undefined;
   }
 
   const depTypes = {
@@ -335,7 +335,7 @@ export async function extractPackageFile(
         packageJsonName ||
         packageFileVersion ||
         npmrc ||
-        lernaDir ||
+        lernaJsonFile ||
         yarnWorkspacesPackages
       )
     ) {
@@ -366,7 +366,7 @@ export async function extractPackageFile(
     ignoreNpmrcFile,
     yarnrc,
     ...lockFiles,
-    lernaDir,
+    lernaJsonFile,
     lernaClient,
     lernaPackages,
     skipInstalls,
diff --git a/lib/manager/npm/extract/monorepo.spec.ts b/lib/manager/npm/extract/monorepo.spec.ts
index 51b1c47ccb0b836d872dae7cefad1092657d5614..0d473c6ec512b853d4d86eee7b6017ee4662f7cb 100644
--- a/lib/manager/npm/extract/monorepo.spec.ts
+++ b/lib/manager/npm/extract/monorepo.spec.ts
@@ -6,7 +6,7 @@ describe('manager/npm/extract', () => {
       const packageFiles = [
         {
           packageFile: 'package.json',
-          lernaDir: '.',
+          lernaJsonFile: 'lerna.json',
           lernaPackages: ['packages/*'],
           packages: ['packages/*'],
           deps: [
@@ -46,7 +46,7 @@ describe('manager/npm/extract', () => {
       ] as any;
       detectMonorepos(packageFiles, false);
       expect(packageFiles).toMatchSnapshot();
-      expect(packageFiles[1].lernaDir).toEqual('.');
+      expect(packageFiles[1].lernaJsonFile).toEqual('lerna.json');
       expect(
         packageFiles.some((packageFile) =>
           packageFile.deps?.some((dep) => dep.skipReason)
@@ -57,7 +57,7 @@ describe('manager/npm/extract', () => {
       const packageFiles = [
         {
           packageFile: 'package.json',
-          lernaDir: '.',
+          lernaJsonFile: 'lerna.json',
           lernaPackages: ['packages/*'],
           packages: ['packages/*'],
           deps: [
@@ -97,7 +97,7 @@ describe('manager/npm/extract', () => {
       ] as any;
       detectMonorepos(packageFiles, true);
       expect(packageFiles).toMatchSnapshot();
-      expect(packageFiles[1].lernaDir).toEqual('.');
+      expect(packageFiles[1].lernaJsonFile).toEqual('lerna.json');
       expect(
         packageFiles.some((packageFile) =>
           packageFile.deps?.some((dep) => dep.skipReason)
@@ -108,7 +108,7 @@ describe('manager/npm/extract', () => {
       const packageFiles = [
         {
           packageFile: 'package.json',
-          lernaDir: '.',
+          lernaJsonFile: 'lerna.json',
           lernaPackages: ['oldpackages/*'],
           lernaClient: 'yarn',
           yarnWorkspacesPackages: ['packages/*'],
@@ -124,7 +124,7 @@ describe('manager/npm/extract', () => {
       ];
       detectMonorepos(packageFiles, false);
       expect(packageFiles).toMatchSnapshot();
-      expect(packageFiles[1].lernaDir).toEqual('.');
+      expect(packageFiles[1].lernaJsonFile).toEqual('lerna.json');
     });
     it('uses yarn workspaces package settings without lerna', () => {
       const packageFiles = [
diff --git a/lib/manager/npm/extract/monorepo.ts b/lib/manager/npm/extract/monorepo.ts
index a6177416cf5ad2c80f37a087f46f5187b1b623e8..8b7b0a17ef30ad6e7245feec292426ee70bc6e3e 100644
--- a/lib/manager/npm/extract/monorepo.ts
+++ b/lib/manager/npm/extract/monorepo.ts
@@ -23,7 +23,7 @@ export function detectMonorepos(
       packageFile,
       npmLock,
       yarnLock,
-      lernaDir,
+      lernaJsonFile,
       lernaClient,
       lernaPackages,
       yarnWorkspacesPackages,
@@ -56,7 +56,7 @@ export function detectMonorepos(
         });
       }
       for (const subPackage of internalPackageFiles) {
-        subPackage.lernaDir = lernaDir;
+        subPackage.lernaJsonFile = lernaJsonFile;
         subPackage.lernaClient = lernaClient;
         subPackage.yarnLock = subPackage.yarnLock || yarnLock;
         subPackage.npmLock = subPackage.npmLock || npmLock;
diff --git a/lib/manager/npm/post-update/index.ts b/lib/manager/npm/post-update/index.ts
index 5bea15ee1fa06f96f98bfb4b3fe996afa4074d70..2479542a7e63ad75c03fd7123d914e4753ca1b89 100644
--- a/lib/manager/npm/post-update/index.ts
+++ b/lib/manager/npm/post-update/index.ts
@@ -9,6 +9,7 @@ import { getChildProcessEnv } from '../../../util/exec/env';
 import {
   deleteLocalFile,
   ensureDir,
+  getSubDirectory,
   outputFile,
   readFile,
   remove,
@@ -32,7 +33,7 @@ export interface DetermineLockFileDirsResult {
   yarnLockDirs: string[];
   npmLockDirs: string[];
   pnpmShrinkwrapDirs: string[];
-  lernaDirs: string[];
+  lernaJsonFiles: string[];
 }
 // istanbul ignore next
 export function determineLockFileDirs(
@@ -42,13 +43,13 @@ export function determineLockFileDirs(
   const npmLockDirs = [];
   const yarnLockDirs = [];
   const pnpmShrinkwrapDirs = [];
-  const lernaDirs = [];
+  const lernaJsonFiles = [];
 
   for (const upgrade of config.upgrades) {
     if (upgrade.updateType === 'lockFileMaintenance' || upgrade.isRemediation) {
       // Return every directory that contains a lockfile
-      if (upgrade.lernaDir && upgrade.npmLock) {
-        lernaDirs.push(upgrade.lernaDir);
+      if (upgrade.lernaJsonFile && upgrade.npmLock) {
+        lernaJsonFiles.push(upgrade.lernaJsonFile);
       } else {
         yarnLockDirs.push(upgrade.yarnLock);
         npmLockDirs.push(upgrade.npmLock);
@@ -72,7 +73,7 @@ export function determineLockFileDirs(
       yarnLockDirs: getDirs(yarnLockDirs),
       npmLockDirs: getDirs(npmLockDirs),
       pnpmShrinkwrapDirs: getDirs(pnpmShrinkwrapDirs),
-      lernaDirs: getDirs(lernaDirs),
+      lernaJsonFiles: getDirs(lernaJsonFiles),
     };
   }
 
@@ -92,15 +93,15 @@ export function determineLockFileDirs(
     logger.trace(`Checking ${String(p.name)} for lock files`);
     const packageFile = getPackageFile(p.name);
     // lerna first
-    if (packageFile.lernaDir && packageFile.npmLock) {
+    if (packageFile.lernaJsonFile && packageFile.npmLock) {
       logger.debug(`${packageFile.packageFile} has lerna lock file`);
-      lernaDirs.push(packageFile.lernaDir);
+      lernaJsonFiles.push(packageFile.lernaJsonFile);
     } else if (
-      packageFile.lernaDir &&
+      packageFile.lernaJsonFile &&
       packageFile.yarnLock &&
       !packageFile.hasYarnWorkspaces
     ) {
-      lernaDirs.push(packageFile.lernaDir);
+      lernaJsonFiles.push(packageFile.lernaJsonFile);
     } else {
       // push full lock file names and convert them later
       yarnLockDirs.push(packageFile.yarnLock);
@@ -113,7 +114,7 @@ export function determineLockFileDirs(
     yarnLockDirs: getDirs(yarnLockDirs),
     npmLockDirs: getDirs(npmLockDirs),
     pnpmShrinkwrapDirs: getDirs(pnpmShrinkwrapDirs),
-    lernaDirs: getDirs(lernaDirs),
+    lernaJsonFiles: getDirs(lernaJsonFiles),
   };
 }
 
@@ -687,11 +688,11 @@ export async function getAdditionalFiles(
     await resetNpmrcContent(fullLockFileDir, npmrcContent);
   }
 
-  for (const lernaDir of dirs.lernaDirs) {
+  for (const lernaJsonFile of dirs.lernaJsonFiles) {
     let lockFile: string;
-    logger.debug(`Finding package.json for lerna directory "${lernaDir}"`);
+    logger.debug(`Finding package.json for lerna location "${lernaJsonFile}"`);
     const lernaPackageFile = packageFiles.npm.find(
-      (p) => upath.dirname(p.packageFile) === lernaDir
+      (p) => getSubDirectory(p.packageFile) === getSubDirectory(lernaJsonFile)
     );
     if (!lernaPackageFile) {
       logger.debug('No matching package.json found');
@@ -704,7 +705,10 @@ export async function getAdditionalFiles(
     }
     const skipInstalls =
       lockFile === 'npm-shrinkwrap.json' ? false : config.skipInstalls;
-    const fullLearnaFileDir = upath.join(config.localDir, lernaDir);
+    const fullLearnaFileDir = upath.join(
+      config.localDir,
+      getSubDirectory(lernaJsonFile)
+    );
     const npmrcContent = await getNpmrcContent(fullLearnaFileDir);
     await updateNpmrcContent(
       fullLearnaFileDir,
diff --git a/lib/manager/types.ts b/lib/manager/types.ts
index 19f012363cb6cedce259bbafea180aaf4c7c3708..b370888e9514c92080a99d83a0ec151a29db2e97 100644
--- a/lib/manager/types.ts
+++ b/lib/manager/types.ts
@@ -74,7 +74,7 @@ export interface NpmLockFiles {
   shrinkwrapJson?: string;
   pnpmShrinkwrap?: string;
   npmLock?: string;
-  lernaDir?: string;
+  lernaJsonFile?: string;
   lockFiles?: string[];
 }
 
diff --git a/lib/workers/repository/extract/__snapshots__/manager-files.spec.ts.snap b/lib/workers/repository/extract/__snapshots__/manager-files.spec.ts.snap
index 76fb7729c5bae1d3ee9147e92525fc5ba11985e2..0689e3fb3591a430f3063c7aeb93e4e2b2504917 100644
--- a/lib/workers/repository/extract/__snapshots__/manager-files.spec.ts.snap
+++ b/lib/workers/repository/extract/__snapshots__/manager-files.spec.ts.snap
@@ -16,7 +16,7 @@ Array [
     ],
     "ignoreNpmrcFile": undefined,
     "lernaClient": undefined,
-    "lernaDir": undefined,
+    "lernaJsonFile": undefined,
     "lernaPackages": undefined,
     "npmLock": undefined,
     "npmrc": undefined,