diff --git a/lib/manager/npm/extract/__snapshots__/index.spec.ts.snap b/lib/manager/npm/extract/__snapshots__/index.spec.ts.snap
index 035deb0bc166f3045cc0dbdffa8c1d79f32f1686..bff6a74c0161605ded6bfd9559d8d38199116ca2 100644
--- a/lib/manager/npm/extract/__snapshots__/index.spec.ts.snap
+++ b/lib/manager/npm/extract/__snapshots__/index.spec.ts.snap
@@ -882,7 +882,7 @@ Object {
     "lernaJsonFile": undefined,
   },
   "npmLock": undefined,
-  "npmrc": undefined,
+  "npmrc": "",
   "packageFile": "package.json",
   "packageFileVersion": "1.0.0",
   "packageJsonName": "renovate",
diff --git a/lib/manager/npm/extract/index.spec.ts b/lib/manager/npm/extract/index.spec.ts
index 8a4f2cc684a1d975096b16237adbea280efd66b0..69ac38e6cb49fcee57fbc3236352badc7ab0633b 100644
--- a/lib/manager/npm/extract/index.spec.ts
+++ b/lib/manager/npm/extract/index.spec.ts
@@ -80,7 +80,7 @@ describe('manager/npm/extract', () => {
       const res = await npmExtract.extractPackageFile(
         input01Content,
         'package.json',
-        defaultConfig
+        { ...defaultConfig, npmrc: 'some-npmrc' }
       );
       expect(res).toMatchSnapshot();
     });
@@ -94,7 +94,7 @@ describe('manager/npm/extract', () => {
       const res = await npmExtract.extractPackageFile(
         input01Content,
         'package.json',
-        defaultConfig
+        { ...defaultConfig, ignoreNpmrcFile: true }
       );
       expect(res).toMatchSnapshot();
     });
diff --git a/lib/manager/npm/extract/index.ts b/lib/manager/npm/extract/index.ts
index 56bb8e110e73b742ce14007ac7020bca18ebabc7..88fcc5a2e598fb54e7dfee66769bb6c6c31c9cc3 100644
--- a/lib/manager/npm/extract/index.ts
+++ b/lib/manager/npm/extract/index.ts
@@ -92,8 +92,9 @@ export async function extractPackageFile(
 
   let npmrc: string;
   const npmrcFileName = getSiblingFileName(fileName, '.npmrc');
-  // istanbul ignore if
-  if (config.ignoreNpmrcFile) {
+  if (is.string(config.npmrc)) {
+    logger.debug('Using configured npmrc');
+  } else if (config.ignoreNpmrcFile) {
     npmrc = '';
   } else {
     npmrc = await readLocalFile(npmrcFileName, 'utf8');
diff --git a/lib/manager/types.ts b/lib/manager/types.ts
index cd70ded36456717556d496f4ba9ea6137cabb92c..600fb7b300e9e1f96264ba8676cff27c9544bea2 100644
--- a/lib/manager/types.ts
+++ b/lib/manager/types.ts
@@ -24,6 +24,7 @@ export interface ExtractConfig extends ManagerConfig {
   gradle?: { timeout?: number };
   aliases?: Record<string, string>;
   ignoreNpmrcFile?: boolean;
+  npmrc?: string;
   yarnrc?: string;
   skipInstalls?: boolean;
   versioning?: string;
diff --git a/lib/util/cache/repository/index.ts b/lib/util/cache/repository/index.ts
index 830d4a57b4caf1f71b2b6e1332370ceebb411e9f..adfdab5d3781fe32721f5866a9dcfe83f50504f6 100644
--- a/lib/util/cache/repository/index.ts
+++ b/lib/util/cache/repository/index.ts
@@ -9,7 +9,7 @@ import type { PackageFile } from '../../../manager/types';
 import type { RepoInitConfig } from '../../../workers/repository/init/common';
 
 // Increment this whenever there could be incompatibilities between old and new cache structure
-export const CACHE_REVISION = 6;
+export const CACHE_REVISION = 7;
 
 export interface BaseBranchCache {
   sha: string; // branch commit sha