diff --git a/lib/manager/common.ts b/lib/manager/common.ts
index 0d219da80c802c39efc0096c238ce11eeac7aacd..0e7421db5f9707a33634c1817f41614163ab6411 100644
--- a/lib/manager/common.ts
+++ b/lib/manager/common.ts
@@ -22,7 +22,7 @@ export interface ExtractConfig extends ManagerConfig {
   gradle?: { timeout?: number };
   aliases?: Record<string, string>;
   ignoreNpmrcFile?: boolean;
-
+  yarnrc?: string;
   skipInstalls?: boolean;
   versioning?: string;
 }
diff --git a/lib/manager/npm/extract/index.ts b/lib/manager/npm/extract/index.ts
index 2e739b24f2f0ed67c38c7a617cae0a3980f8441e..af87571eb37ca8887c998c0d6805ca975bcdd4af 100644
--- a/lib/manager/npm/extract/index.ts
+++ b/lib/manager/npm/extract/index.ts
@@ -118,7 +118,10 @@ export async function extractPackageFile(
     }
   }
   const yarnrcFileName = getSiblingFileName(fileName, '.yarnrc');
-  const yarnrc = (await readLocalFile(yarnrcFileName, 'utf8')) || undefined;
+  let yarnrc;
+  if (!is.string(config.yarnrc)) {
+    yarnrc = (await readLocalFile(yarnrcFileName, 'utf8')) || undefined;
+  }
 
   let lernaDir: string;
   let lernaPackages: string[];
diff --git a/lib/manager/npm/post-update/index.ts b/lib/manager/npm/post-update/index.ts
index c89f361a3603c314e590e8e88cfce3c352cd0c43..b93ac0080d17e8a8e4b2175bbe6aaab1f7bdf8d4 100644
--- a/lib/manager/npm/post-update/index.ts
+++ b/lib/manager/npm/post-update/index.ts
@@ -1,4 +1,5 @@
 import path from 'path';
+import is from '@sindresorhus/is';
 import upath from 'upath';
 import { SYSTEM_INSUFFICIENT_DISK_SPACE } from '../../../constants/error-messages';
 import { id as npmId } from '../../../datasource/npm';
@@ -129,7 +130,7 @@ export async function writeExistingFiles(
     logger.debug('Removing ignored .npmrc file before artifact generation');
     await remove(npmrcFile);
   }
-  if (config.yarnrc) {
+  if (is.string(config.yarnrc)) {
     logger.debug(`Writing repo .yarnrc (${config.localDir})`);
     await outputFile(upath.join(config.localDir, '.yarnrc'), config.yarnrc);
   }