diff --git a/docs/usage/configuration-options.md b/docs/usage/configuration-options.md
index c7b4c91d667881a9897cb95375d632a08d5bdf30..b21d513dc1b8a5eef8d2cc0244cd520d052d14d7 100644
--- a/docs/usage/configuration-options.md
+++ b/docs/usage/configuration-options.md
@@ -969,13 +969,6 @@ The above is the same as if you wrote this package rule:
 }
 ```
 
-## ignoreNpmrcFile
-
-By default, Renovate will look for and use any `.npmrc` file it finds in a repository.
-Additionally, it will be read in by `npm` or `yarn` at the time of lock file generation.
-Sometimes this causes problems, for example if the file contains placeholder values, so you can configure this to `true` and Renovate will ignore any `.npmrc` files it finds and temporarily remove the file before running `npm install` or `yarn install`.
-Renovate will try to configure this to `true` also if you have configured any `npmrc` string within your config file.
-
 ## ignorePaths
 
 Using this setting, you can selectively ignore package files that you don't want Renovate autodiscovering.
diff --git a/lib/config/__snapshots__/migration.spec.ts.snap b/lib/config/__snapshots__/migration.spec.ts.snap
index 27d5183112d3f33ec83271f8d4574e652c769510..c9c32342a2802212b368c573dcac0c30c36b4ece 100644
--- a/lib/config/__snapshots__/migration.spec.ts.snap
+++ b/lib/config/__snapshots__/migration.spec.ts.snap
@@ -125,6 +125,7 @@ Object {
   "minor": Object {
     "automerge": true,
   },
+  "npmrc": "",
   "nvmrc": Object {
     "packageRules": Array [
       Object {
diff --git a/lib/config/definitions.ts b/lib/config/definitions.ts
index 6db106c11f72c6eec6b8f7cd08bf53e1b93e821e..bc4584035147ff2bd0e6df361d99d363ba4ba3b8 100644
--- a/lib/config/definitions.ts
+++ b/lib/config/definitions.ts
@@ -572,12 +572,6 @@ const options: RenovateOptions[] = [
     default: 'auto',
     admin: true,
   },
-  {
-    name: 'ignoreNpmrcFile',
-    description: 'Whether to ignore any .npmrc file found in repository.',
-    type: 'boolean',
-    default: false,
-  },
   {
     name: 'autodiscover',
     description: 'Autodiscover all repositories.',
diff --git a/lib/config/migration.spec.ts b/lib/config/migration.spec.ts
index 477b523b2ead923e586c44f8e560b4e9910b185b..ba6fff969021671ca9a6822d5575e67b2370415b 100644
--- a/lib/config/migration.spec.ts
+++ b/lib/config/migration.spec.ts
@@ -44,6 +44,7 @@ describe(getName(__filename), () => {
         onboarding: 'false' as never,
         multipleMajorPrs: true,
         gitFs: false,
+        ignoreNpmrcFile: true,
         separateMajorReleases: true,
         separatePatchReleases: true,
         suppressNotifications: ['lockFileErrors', 'prEditNotification'],
diff --git a/lib/config/migration.ts b/lib/config/migration.ts
index 982da884faa34c5e673ad489953e3d7a9932ab8d..64cbd52c81ff1908ce8a7f25fc57cb581f942112 100644
--- a/lib/config/migration.ts
+++ b/lib/config/migration.ts
@@ -207,6 +207,9 @@ export function migrateConfig(
           migratedConfig.allowScripts ??= true;
           migratedConfig.exposeAllEnv ??= true;
         }
+      } else if (key === 'ignoreNpmrcFile') {
+        delete migratedConfig.ignoreNpmrcFile;
+        migratedConfig.npmrc ||= '';
       } else if (
         key === 'branchName' &&
         is.string(val) &&
diff --git a/lib/manager/npm/extract/__snapshots__/index.spec.ts.snap b/lib/manager/npm/extract/__snapshots__/index.spec.ts.snap
index 3200c3f4e364261289fd9511a120a2cab9f662a7..ec3e8ca7139576376c0f4ba3ec19aefea6756a65 100644
--- a/lib/manager/npm/extract/__snapshots__/index.spec.ts.snap
+++ b/lib/manager/npm/extract/__snapshots__/index.spec.ts.snap
@@ -11,7 +11,6 @@ Object {
       "skipReason": "invalid-name",
     },
   ],
-  "ignoreNpmrcFile": undefined,
   "lernaClient": undefined,
   "lernaPackages": undefined,
   "managerData": Object {
@@ -135,7 +134,6 @@ Object {
       "prettyDepType": "engine",
     },
   ],
-  "ignoreNpmrcFile": undefined,
   "lernaClient": undefined,
   "lernaPackages": undefined,
   "managerData": Object {
@@ -299,7 +297,6 @@ Object {
       "sourceUrl": "https://github.com/owner/n",
     },
   ],
-  "ignoreNpmrcFile": undefined,
   "lernaClient": undefined,
   "lernaPackages": undefined,
   "managerData": Object {
@@ -349,7 +346,6 @@ Object {
       "skipReason": "unknown-version",
     },
   ],
-  "ignoreNpmrcFile": undefined,
   "lernaClient": undefined,
   "lernaPackages": undefined,
   "managerData": Object {
@@ -410,7 +406,6 @@ Object {
       "skipReason": "unknown-volta",
     },
   ],
-  "ignoreNpmrcFile": undefined,
   "lernaClient": undefined,
   "lernaPackages": undefined,
   "managerData": Object {
@@ -465,7 +460,6 @@ Object {
       "skipReason": "unknown-version",
     },
   ],
-  "ignoreNpmrcFile": undefined,
   "lernaClient": undefined,
   "lernaPackages": undefined,
   "managerData": Object {
@@ -602,7 +596,6 @@ Object {
       "prettyDepType": "resolutions",
     },
   ],
-  "ignoreNpmrcFile": undefined,
   "lernaClient": "npm",
   "lernaPackages": undefined,
   "managerData": Object {
@@ -739,7 +732,6 @@ Object {
       "prettyDepType": "resolutions",
     },
   ],
-  "ignoreNpmrcFile": undefined,
   "lernaClient": "yarn",
   "lernaPackages": undefined,
   "managerData": Object {
@@ -876,7 +868,6 @@ Object {
       "prettyDepType": "resolutions",
     },
   ],
-  "ignoreNpmrcFile": undefined,
   "lernaClient": undefined,
   "lernaPackages": undefined,
   "managerData": Object {
@@ -899,7 +890,6 @@ exports[`manager/npm/extract/index .extractPackageFile() finds complex yarn work
 Object {
   "constraints": Object {},
   "deps": Array [],
-  "ignoreNpmrcFile": undefined,
   "lernaClient": "npm",
   "lernaPackages": undefined,
   "managerData": Object {
@@ -1038,7 +1028,6 @@ Object {
       "prettyDepType": "resolutions",
     },
   ],
-  "ignoreNpmrcFile": undefined,
   "lernaClient": "npm",
   "lernaPackages": undefined,
   "managerData": Object {
@@ -1061,7 +1050,6 @@ exports[`manager/npm/extract/index .extractPackageFile() finds simple yarn works
 Object {
   "constraints": Object {},
   "deps": Array [],
-  "ignoreNpmrcFile": undefined,
   "lernaClient": "npm",
   "lernaPackages": undefined,
   "managerData": Object {
@@ -1086,7 +1074,6 @@ exports[`manager/npm/extract/index .extractPackageFile() finds simple yarn works
 Object {
   "constraints": Object {},
   "deps": Array [],
-  "ignoreNpmrcFile": undefined,
   "lernaClient": undefined,
   "lernaPackages": undefined,
   "managerData": Object {
@@ -1225,7 +1212,6 @@ Object {
       "prettyDepType": "resolutions",
     },
   ],
-  "ignoreNpmrcFile": undefined,
   "lernaClient": undefined,
   "lernaPackages": undefined,
   "managerData": Object {
diff --git a/lib/manager/npm/extract/index.spec.ts b/lib/manager/npm/extract/index.spec.ts
index fa78521e8218bad423dce610d0ed9bb156ce1304..e4d6bac61dc2b01de9db21042f6b1eb3585a4284 100644
--- a/lib/manager/npm/extract/index.spec.ts
+++ b/lib/manager/npm/extract/index.spec.ts
@@ -113,6 +113,20 @@ describe(getName(__filename), () => {
       );
       expect(res.npmrc).toBeDefined();
     });
+    it('ignores .npmrc when config.npmrc is defined', async () => {
+      fs.readLocalFile = jest.fn((fileName) => {
+        if (fileName === '.npmrc') {
+          return 'some-npmrc\n';
+        }
+        return null;
+      });
+      const res = await npmExtract.extractPackageFile(
+        input01Content,
+        'package.json',
+        { npmrc: 'some-configured-npmrc' }
+      );
+      expect(res.npmrc).toBeUndefined();
+    });
     it('finds and discards .npmrc', async () => {
       fs.readLocalFile = jest.fn((fileName) => {
         if (fileName === '.npmrc') {
@@ -126,7 +140,7 @@ describe(getName(__filename), () => {
         'package.json',
         {}
       );
-      expect(res.npmrc).toBeUndefined();
+      expect(res.npmrc).toEqual('');
     });
     it('finds lerna', async () => {
       fs.readLocalFile = jest.fn((fileName) => {
diff --git a/lib/manager/npm/extract/index.ts b/lib/manager/npm/extract/index.ts
index 727484819f61838262d5c6e79012e11a5dfc4a2e..cbc04c1596e62927367cb8f2b41caaea9d55b3f9 100644
--- a/lib/manager/npm/extract/index.ts
+++ b/lib/manager/npm/extract/index.ts
@@ -6,11 +6,7 @@ import * as datasourceGithubTags from '../../../datasource/github-tags';
 import { id as npmId } from '../../../datasource/npm';
 import { logger } from '../../../logger';
 import { SkipReason } from '../../../types';
-import {
-  deleteLocalFile,
-  getSiblingFileName,
-  readLocalFile,
-} from '../../../util/fs';
+import { getSiblingFileName, readLocalFile } from '../../../util/fs';
 import * as nodeVersioning from '../../../versioning/node';
 import { isValid, isVersion } from '../../../versioning/npm';
 import type {
@@ -95,26 +91,24 @@ export async function extractPackageFile(
   delete lockFiles.shrinkwrapJson;
 
   let npmrc: string;
-  let ignoreNpmrcFile: boolean;
   const npmrcFileName = getSiblingFileName(fileName, '.npmrc');
-  // istanbul ignore if
-  if (config.ignoreNpmrcFile) {
-    await deleteLocalFile(npmrcFileName);
-  } else {
-    npmrc = await readLocalFile(npmrcFileName, 'utf8');
-    if (npmrc?.includes('package-lock')) {
-      logger.debug('Stripping package-lock setting from npmrc');
-      npmrc = npmrc.replace(/(^|\n)package-lock.*?(\n|$)/g, '\n');
-    }
-    if (is.string(npmrc)) {
+  const npmrcContent = await readLocalFile(npmrcFileName, 'utf8');
+  if (is.string(npmrcContent)) {
+    if (is.string(config.npmrc)) {
+      logger.debug(
+        { npmrcFileName },
+        'Repo .npmrc file is ignored due to presence of config.npmrc'
+      );
+    } else {
+      npmrc = npmrcContent;
+      if (npmrc?.includes('package-lock')) {
+        logger.debug('Stripping package-lock setting from .npmrc');
+        npmrc = npmrc.replace(/(^|\n)package-lock.*?(\n|$)/g, '\n');
+      }
       if (npmrc.includes('=${') && !getAdminConfig().exposeAllEnv) {
-        logger.debug('Discarding .npmrc file with variables');
-        ignoreNpmrcFile = true;
-        npmrc = undefined;
-        await deleteLocalFile(npmrcFileName);
+        logger.debug('Overriding .npmrc file with variables');
+        npmrc = '';
       }
-    } else {
-      npmrc = undefined;
     }
   }
   const yarnrcFileName = getSiblingFileName(fileName, '.yarnrc');
@@ -354,7 +348,6 @@ export async function extractPackageFile(
     packageFileVersion,
     packageJsonType,
     npmrc,
-    ignoreNpmrcFile,
     yarnrc,
     ...lockFiles,
     managerData: {
diff --git a/lib/manager/npm/post-update/index.ts b/lib/manager/npm/post-update/index.ts
index 083272c1612b0f524b573b9a622c55f84b82fe7b..aa992b653e70e81e5de778b93e60c755d1fbf7f7 100644
--- a/lib/manager/npm/post-update/index.ts
+++ b/lib/manager/npm/post-update/index.ts
@@ -144,9 +144,6 @@ export async function writeExistingFiles(
       } catch (err) /* istanbul ignore next */ {
         logger.warn({ npmrcFilename, err }, 'Error writing .npmrc');
       }
-    } else if (config.ignoreNpmrcFile) {
-      logger.debug('Removing ignored .npmrc file before artifact generation');
-      await remove(npmrcFilename);
     }
     if (packageFile.yarnrc) {
       logger.debug(`Writing .yarnrc to ${basedir}`);
diff --git a/lib/manager/types.ts b/lib/manager/types.ts
index a0e31935fe05eb02bddc493d2b2920854f269801..d19073f1ff208b8b18b50939fecbb4bd834f3168 100644
--- a/lib/manager/types.ts
+++ b/lib/manager/types.ts
@@ -23,7 +23,7 @@ export interface ExtractConfig extends ManagerConfig {
   endpoint?: string;
   gradle?: { timeout?: number };
   aliases?: Record<string, string>;
-  ignoreNpmrcFile?: boolean;
+  npmrc?: string;
   yarnrc?: string;
   versioning?: string;
   updateInternalDeps?: boolean;
@@ -89,7 +89,6 @@ export interface PackageFile<T = Record<string, any>>
   datasource?: string;
   registryUrls?: string[];
   deps: PackageDependency[];
-  ignoreNpmrcFile?: boolean;
   lernaClient?: string;
   lernaPackages?: string[];
   mavenProps?: Record<string, any>;
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 917cd12286f1557d2889e1c32989d859d241423e..579ce1c3515dc02ab7bf60c1a02f216c75c51b86 100644
--- a/lib/workers/repository/extract/__snapshots__/manager-files.spec.ts.snap
+++ b/lib/workers/repository/extract/__snapshots__/manager-files.spec.ts.snap
@@ -14,7 +14,6 @@ Array [
         "prettyDepType": "dependency",
       },
     ],
-    "ignoreNpmrcFile": undefined,
     "lernaClient": undefined,
     "lernaPackages": undefined,
     "managerData": Object {
diff --git a/lib/workers/repository/init/config.ts b/lib/workers/repository/init/config.ts
index fb802acef351f83f4e907ef79fde89adfea2cf69..15a92b1e2f9b1ae2a79f2bf6d19477feddcba191 100644
--- a/lib/workers/repository/init/config.ts
+++ b/lib/workers/repository/init/config.ts
@@ -203,7 +203,6 @@ export async function mergeRenovateConfig(
       'Ignoring any .npmrc files in repository due to configured npmrc'
     );
     npmApi.setNpmrc(resolvedConfig.npmrc);
-    resolvedConfig.ignoreNpmrcFile = true;
   }
   // istanbul ignore if
   if (resolvedConfig.hostRules) {