diff --git a/lib/manager/npm/extract/__snapshots__/index.spec.ts.snap b/lib/manager/npm/extract/__snapshots__/index.spec.ts.snap
index 30f6f6e5bac7e4cafdccc7a7046fd1cfd39a2905..5037b09dd13ae6fd36fda1db2deb7abe00dbe1f4 100644
--- a/lib/manager/npm/extract/__snapshots__/index.spec.ts.snap
+++ b/lib/manager/npm/extract/__snapshots__/index.spec.ts.snap
@@ -15,6 +15,7 @@ Object {
   "lernaPackages": undefined,
   "managerData": Object {
     "lernaJsonFile": undefined,
+    "yarnZeroInstall": false,
   },
   "npmLock": undefined,
   "npmrc": undefined,
@@ -137,6 +138,7 @@ Object {
   "lernaPackages": undefined,
   "managerData": Object {
     "lernaJsonFile": undefined,
+    "yarnZeroInstall": false,
   },
   "npmLock": undefined,
   "npmrc": undefined,
@@ -299,6 +301,7 @@ Object {
   "lernaPackages": undefined,
   "managerData": Object {
     "lernaJsonFile": undefined,
+    "yarnZeroInstall": false,
   },
   "npmLock": undefined,
   "npmrc": undefined,
@@ -347,6 +350,7 @@ Object {
   "lernaPackages": undefined,
   "managerData": Object {
     "lernaJsonFile": undefined,
+    "yarnZeroInstall": false,
   },
   "npmLock": "package-lock.json",
   "npmrc": undefined,
@@ -413,6 +417,7 @@ Object {
   "lernaPackages": undefined,
   "managerData": Object {
     "lernaJsonFile": undefined,
+    "yarnZeroInstall": false,
   },
   "npmLock": undefined,
   "npmrc": undefined,
@@ -466,6 +471,7 @@ Object {
   "lernaPackages": undefined,
   "managerData": Object {
     "lernaJsonFile": undefined,
+    "yarnZeroInstall": false,
   },
   "npmLock": undefined,
   "npmrc": undefined,
@@ -601,6 +607,7 @@ Object {
   "lernaPackages": undefined,
   "managerData": Object {
     "lernaJsonFile": "lerna.json",
+    "yarnZeroInstall": false,
   },
   "npmLock": undefined,
   "npmrc": undefined,
@@ -736,6 +743,7 @@ Object {
   "lernaPackages": undefined,
   "managerData": Object {
     "lernaJsonFile": "lerna.json",
+    "yarnZeroInstall": false,
   },
   "npmLock": undefined,
   "npmrc": undefined,
@@ -871,6 +879,7 @@ Object {
   "lernaPackages": undefined,
   "managerData": Object {
     "lernaJsonFile": undefined,
+    "yarnZeroInstall": false,
   },
   "npmLock": undefined,
   "npmrc": undefined,
@@ -892,6 +901,7 @@ Object {
   "lernaPackages": undefined,
   "managerData": Object {
     "lernaJsonFile": "lerna.json",
+    "yarnZeroInstall": false,
   },
   "npmLock": undefined,
   "npmrc": undefined,
@@ -1029,6 +1039,7 @@ Object {
   "lernaPackages": undefined,
   "managerData": Object {
     "lernaJsonFile": "lerna.json",
+    "yarnZeroInstall": false,
   },
   "npmLock": undefined,
   "npmrc": undefined,
@@ -1050,6 +1061,7 @@ Object {
   "lernaPackages": undefined,
   "managerData": Object {
     "lernaJsonFile": "lerna.json",
+    "yarnZeroInstall": false,
   },
   "npmLock": undefined,
   "npmrc": undefined,
@@ -1073,6 +1085,7 @@ Object {
   "lernaPackages": undefined,
   "managerData": Object {
     "lernaJsonFile": undefined,
+    "yarnZeroInstall": false,
   },
   "npmLock": undefined,
   "npmrc": undefined,
@@ -1210,6 +1223,7 @@ Object {
   "lernaPackages": undefined,
   "managerData": Object {
     "lernaJsonFile": undefined,
+    "yarnZeroInstall": false,
   },
   "npmLock": undefined,
   "npmrc": undefined,
@@ -1327,6 +1341,7 @@ Object {
   "lernaPackages": undefined,
   "managerData": Object {
     "lernaJsonFile": undefined,
+    "yarnZeroInstall": false,
   },
   "npmLock": undefined,
   "npmrc": undefined,
@@ -1462,6 +1477,7 @@ Object {
   "lernaPackages": undefined,
   "managerData": Object {
     "lernaJsonFile": undefined,
+    "yarnZeroInstall": true,
   },
   "npmLock": undefined,
   "npmrc": undefined,
diff --git a/lib/manager/npm/extract/index.ts b/lib/manager/npm/extract/index.ts
index ebeb46e3c0e0918f1f38eed9b3200314f2735b29..7b2156cfce42f3481fdbe8bece18e5a517447ef6 100644
--- a/lib/manager/npm/extract/index.ts
+++ b/lib/manager/npm/extract/index.ts
@@ -369,6 +369,7 @@ export async function extractPackageFile(
     ...lockFiles,
     managerData: {
       lernaJsonFile,
+      yarnZeroInstall,
     },
     lernaClient,
     lernaPackages,
diff --git a/lib/manager/npm/post-update/__snapshots__/yarn.spec.ts.snap b/lib/manager/npm/post-update/__snapshots__/yarn.spec.ts.snap
index 2ddd158992983bcef73502ce23e13cd3674ce227..36e86da88b919007c8e1893af4abd431fb3bf573 100644
--- a/lib/manager/npm/post-update/__snapshots__/yarn.spec.ts.snap
+++ b/lib/manager/npm/post-update/__snapshots__/yarn.spec.ts.snap
@@ -38,6 +38,33 @@ Object {
 }
 `;
 
+exports[`manager/npm/post-update/yarn does not use global cache if zero install is detected 1`] = `
+Array [
+  Object {
+    "cmd": "yarn install",
+    "options": Object {
+      "cwd": "some-dir",
+      "encoding": "utf-8",
+      "env": Object {
+        "CI": "true",
+        "HOME": "/home/user",
+        "HTTPS_PROXY": "https://example.com",
+        "HTTP_PROXY": "http://example.com",
+        "LANG": "en_US.UTF-8",
+        "LC_ALL": "en_US",
+        "NO_PROXY": "localhost",
+        "PATH": "/tmp/path",
+        "YARN_ENABLE_IMMUTABLE_INSTALLS": "false",
+        "YARN_ENABLE_SCRIPTS": "0",
+        "YARN_HTTP_TIMEOUT": "100000",
+      },
+      "maxBuffer": 10485760,
+      "timeout": 900000,
+    },
+  },
+]
+`;
+
 exports[`manager/npm/post-update/yarn generates lock files using yarn v1.22.0 1`] = `
 Array [
   Object {
@@ -159,6 +186,7 @@ Array [
         "LC_ALL": "en_US",
         "NO_PROXY": "localhost",
         "PATH": "/tmp/path",
+        "YARN_ENABLE_GLOBAL_CACHE": "1",
         "YARN_ENABLE_IMMUTABLE_INSTALLS": "false",
         "YARN_ENABLE_SCRIPTS": "0",
         "YARN_GLOBAL_FOLDER": "/tmp/renovate/cache/berry",
@@ -187,6 +215,7 @@ Array [
         "LC_ALL": "en_US",
         "NO_PROXY": "localhost",
         "PATH": "/tmp/path",
+        "YARN_ENABLE_GLOBAL_CACHE": "1",
         "YARN_ENABLE_IMMUTABLE_INSTALLS": "false",
         "YARN_ENABLE_SCRIPTS": "0",
         "YARN_GLOBAL_FOLDER": "/tmp/renovate/cache/berry",
@@ -210,6 +239,7 @@ Array [
         "LC_ALL": "en_US",
         "NO_PROXY": "localhost",
         "PATH": "/tmp/path",
+        "YARN_ENABLE_GLOBAL_CACHE": "1",
         "YARN_ENABLE_IMMUTABLE_INSTALLS": "false",
         "YARN_ENABLE_SCRIPTS": "0",
         "YARN_GLOBAL_FOLDER": "/tmp/renovate/cache/berry",
@@ -238,6 +268,7 @@ Array [
         "LC_ALL": "en_US",
         "NO_PROXY": "localhost",
         "PATH": "/tmp/path",
+        "YARN_ENABLE_GLOBAL_CACHE": "1",
         "YARN_ENABLE_IMMUTABLE_INSTALLS": "false",
         "YARN_GLOBAL_FOLDER": "/tmp/renovate/cache/berry",
         "YARN_HTTP_TIMEOUT": "100000",
@@ -260,6 +291,7 @@ Array [
         "LC_ALL": "en_US",
         "NO_PROXY": "localhost",
         "PATH": "/tmp/path",
+        "YARN_ENABLE_GLOBAL_CACHE": "1",
         "YARN_ENABLE_IMMUTABLE_INSTALLS": "false",
         "YARN_GLOBAL_FOLDER": "/tmp/renovate/cache/berry",
         "YARN_HTTP_TIMEOUT": "100000",
@@ -287,6 +319,7 @@ Array [
         "LC_ALL": "en_US",
         "NO_PROXY": "localhost",
         "PATH": "/tmp/path",
+        "YARN_ENABLE_GLOBAL_CACHE": "1",
         "YARN_ENABLE_IMMUTABLE_INSTALLS": "false",
         "YARN_HTTP_TIMEOUT": "100000",
       },
@@ -308,6 +341,7 @@ Array [
         "LC_ALL": "en_US",
         "NO_PROXY": "localhost",
         "PATH": "/tmp/path",
+        "YARN_ENABLE_GLOBAL_CACHE": "1",
         "YARN_ENABLE_IMMUTABLE_INSTALLS": "false",
         "YARN_HTTP_TIMEOUT": "100000",
       },
@@ -434,6 +468,7 @@ Array [
         "LC_ALL": "en_US",
         "NO_PROXY": "localhost",
         "PATH": "/tmp/path",
+        "YARN_ENABLE_GLOBAL_CACHE": "1",
         "YARN_ENABLE_IMMUTABLE_INSTALLS": "false",
         "YARN_ENABLE_SCRIPTS": "0",
         "YARN_HTTP_TIMEOUT": "100000",
@@ -461,6 +496,7 @@ Array [
         "LC_ALL": "en_US",
         "NO_PROXY": "localhost",
         "PATH": "/tmp/path",
+        "YARN_ENABLE_GLOBAL_CACHE": "1",
         "YARN_ENABLE_IMMUTABLE_INSTALLS": "false",
         "YARN_ENABLE_SCRIPTS": "0",
         "YARN_HTTP_TIMEOUT": "100000",
@@ -483,6 +519,7 @@ Array [
         "LC_ALL": "en_US",
         "NO_PROXY": "localhost",
         "PATH": "/tmp/path",
+        "YARN_ENABLE_GLOBAL_CACHE": "1",
         "YARN_ENABLE_IMMUTABLE_INSTALLS": "false",
         "YARN_ENABLE_SCRIPTS": "0",
         "YARN_HTTP_TIMEOUT": "100000",
@@ -596,6 +633,7 @@ Array [
         "LC_ALL": "en_US",
         "NO_PROXY": "localhost",
         "PATH": "/tmp/path",
+        "YARN_ENABLE_GLOBAL_CACHE": "1",
         "YARN_ENABLE_IMMUTABLE_INSTALLS": "false",
         "YARN_ENABLE_SCRIPTS": "0",
         "YARN_HTTP_TIMEOUT": "100000",
@@ -618,6 +656,7 @@ Array [
         "LC_ALL": "en_US",
         "NO_PROXY": "localhost",
         "PATH": "/tmp/path",
+        "YARN_ENABLE_GLOBAL_CACHE": "1",
         "YARN_ENABLE_IMMUTABLE_INSTALLS": "false",
         "YARN_ENABLE_SCRIPTS": "0",
         "YARN_HTTP_TIMEOUT": "100000",
@@ -645,6 +684,7 @@ Array [
         "LC_ALL": "en_US",
         "NO_PROXY": "localhost",
         "PATH": "/tmp/path",
+        "YARN_ENABLE_GLOBAL_CACHE": "1",
         "YARN_ENABLE_IMMUTABLE_INSTALLS": "false",
         "YARN_HTTP_TIMEOUT": "100000",
       },
@@ -666,6 +706,7 @@ Array [
         "LC_ALL": "en_US",
         "NO_PROXY": "localhost",
         "PATH": "/tmp/path",
+        "YARN_ENABLE_GLOBAL_CACHE": "1",
         "YARN_ENABLE_IMMUTABLE_INSTALLS": "false",
         "YARN_HTTP_TIMEOUT": "100000",
       },
diff --git a/lib/manager/npm/post-update/yarn.spec.ts b/lib/manager/npm/post-update/yarn.spec.ts
index 9b950ada230be6d5116d4872eb7272c55da841ba..b1a54229f28a03996318b2934df805e447754933 100644
--- a/lib/manager/npm/post-update/yarn.spec.ts
+++ b/lib/manager/npm/post-update/yarn.spec.ts
@@ -81,10 +81,7 @@ describe('manager/npm/post-update/yarn', () => {
       stdout: '3.0.0',
       stderr: '',
     });
-    fs.readFile.mockImplementation(
-      (filename, encoding) =>
-        new Promise<string>((resolve) => resolve('package-lock-contents'))
-    );
+    fs.readFile.mockResolvedValueOnce('package-lock-contents');
     const config = {
       constraints: {
         yarn: '3.0.0',
@@ -97,6 +94,24 @@ describe('manager/npm/post-update/yarn', () => {
     expect(fixSnapshots(execSnapshots)).toMatchSnapshot();
   });
 
+  it('does not use global cache if zero install is detected', async () => {
+    const execSnapshots = mockExecAll(exec, {
+      stdout: '2.1.0',
+      stderr: '',
+    });
+    fs.readFile.mockResolvedValueOnce('package-lock-contents');
+    const config = {
+      constraints: {
+        yarn: '>= 2.0.0',
+      },
+      postUpdateOptions: ['yarnDedupeFewer', 'yarnDedupeHighest'],
+      managerData: { yarnZeroInstall: true },
+    };
+    const res = await yarnHelper.generateLockFile('some-dir', {}, config);
+    expect(res.lockFile).toEqual('package-lock-contents');
+    expect(fixSnapshots(execSnapshots)).toMatchSnapshot();
+  });
+
   it.each([
     ['1.22.0', '^1.10.0'],
     ['2.1.0', '>= 2.0.0'],
diff --git a/lib/manager/npm/post-update/yarn.ts b/lib/manager/npm/post-update/yarn.ts
index 5166f8ce47ffccb676f84fc5cc435b763c75ee27..24e15f9ef630bc1a5b03f285a759ff16ee9e176e 100644
--- a/lib/manager/npm/post-update/yarn.ts
+++ b/lib/manager/npm/post-update/yarn.ts
@@ -105,6 +105,10 @@ export async function generateLockFile(
       extraEnv.YARN_ENABLE_IMMUTABLE_INSTALLS = 'false';
       extraEnv.YARN_HTTP_TIMEOUT = '100000';
       extraEnv.YARN_GLOBAL_FOLDER = env.YARN_GLOBAL_FOLDER;
+      if (!config.managerData?.yarnZeroInstall) {
+        logger.debug('Enabling global cache as zero-install is not detected');
+        extraEnv.YARN_ENABLE_GLOBAL_CACHE = '1';
+      }
     }
     if (!getGlobalConfig().allowScripts || config.ignoreScripts) {
       if (isYarn1) {
diff --git a/lib/manager/types.ts b/lib/manager/types.ts
index 6f09f08baac548eb925af185210ae9b5a2a781ed..fb2701cd6c07119ba1844ea242fb4f8b2fe6ba08 100644
--- a/lib/manager/types.ts
+++ b/lib/manager/types.ts
@@ -255,7 +255,9 @@ export interface ManagerApi {
 }
 
 // TODO: name and properties used by npm manager
-export interface PostUpdateConfig extends Record<string, any> {
+export interface PostUpdateConfig<T = Record<string, any>>
+  extends Record<string, any>,
+    ManagerData<T> {
   updatedPackageFiles?: File[];
   postUpdateOptions?: string[];
   skipInstalls?: boolean;
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 631dbbcf5ccb41f2f709d5a05395baf1cc0a876f..281f2250844f504fef1294168e0796726f8451be 100644
--- a/lib/workers/repository/extract/__snapshots__/manager-files.spec.ts.snap
+++ b/lib/workers/repository/extract/__snapshots__/manager-files.spec.ts.snap
@@ -18,6 +18,7 @@ Array [
     "lernaPackages": undefined,
     "managerData": Object {
       "lernaJsonFile": undefined,
+      "yarnZeroInstall": false,
     },
     "npmLock": undefined,
     "npmrc": undefined,