diff --git a/lib/config/definitions.js b/lib/config/definitions.js
index 42868154a028c36384d0a059914f63c46c549c83..c58be3d18e8e070fb652e94f1ab704cb4a9b7644 100644
--- a/lib/config/definitions.js
+++ b/lib/config/definitions.js
@@ -251,6 +251,7 @@ const options = [
     description:
       'Skip installing modules/dependencies if lock file updating is possible alone',
     type: 'boolean',
+    default: null,
     admin: true,
   },
   {
diff --git a/lib/manager/npm/extract/index.js b/lib/manager/npm/extract/index.js
index 5cf44ee96b36e59a3fce52602b8b0d7306d2b358..f082153d2e9efaedd45e9e9bafc7e493d36a265c 100644
--- a/lib/manager/npm/extract/index.js
+++ b/lib/manager/npm/extract/index.js
@@ -94,7 +94,7 @@ async function extractDependencies(content, fileName, config) {
   let lernaDir;
   let lernaPackages;
   let lernaClient;
-  let skipInstalls = true;
+  let hasFileRefs = false;
   const lernaJson = JSON.parse(
     await platform.getFile(upath.join(path.dirname(fileName), 'lerna.json'))
   );
@@ -134,7 +134,7 @@ async function extractDependencies(content, fileName, config) {
     }
     if (dep.currentValue.startsWith('file:')) {
       dep.skipReason = 'file';
-      skipInstalls = false;
+      hasFileRefs = true;
       return dep;
     }
     if (semver.isValid(dep.currentValue)) {
@@ -237,6 +237,18 @@ async function extractDependencies(content, fileName, config) {
       return null;
     }
   }
+  let skipInstalls = config.skipInstalls;
+  if (skipInstalls === null) {
+    if (hasFileRefs) {
+      // https://npm.community/t/npm-i-package-lock-only-changes-lock-file-incorrectly-when-file-references-used-in-dependencies/1412
+      // Explanation:
+      //  - npm install --package-lock-only is buggy for transitive deps in file: references
+      //  - So we set skipInstalls to false if file: refs are found *and* the user hasn't explicitly set the value already
+      skipInstalls = false;
+    } else {
+      skipInstalls = true;
+    }
+  }
   return {
     deps,
     packageJsonName,
@@ -248,7 +260,7 @@ async function extractDependencies(content, fileName, config) {
     lernaDir,
     lernaClient,
     lernaPackages,
-    skipInstalls: config.skipInstalls && skipInstalls,
+    skipInstalls,
     yarnWorkspacesPackages,
   };
 }
diff --git a/test/workers/repository/updates/__snapshots__/flatten.spec.js.snap b/test/workers/repository/updates/__snapshots__/flatten.spec.js.snap
index e4a1ead9a9bec03fe7f265ea5ecb38cdc38bebb8..629cef0242ff9c5de21352ee17369e57606c3b8d 100644
--- a/test/workers/repository/updates/__snapshots__/flatten.spec.js.snap
+++ b/test/workers/repository/updates/__snapshots__/flatten.spec.js.snap
@@ -77,7 +77,7 @@ Array [
     "semanticCommits": null,
     "separateMajorMinor": true,
     "separateMinorPatch": false,
-    "skipInstalls": true,
+    "skipInstalls": null,
     "statusCheckVerify": false,
     "timezone": null,
     "unpublishSafe": false,
@@ -168,7 +168,7 @@ Array [
     "semanticCommits": null,
     "separateMajorMinor": true,
     "separateMinorPatch": false,
-    "skipInstalls": true,
+    "skipInstalls": null,
     "statusCheckVerify": false,
     "timezone": null,
     "unpublishSafe": false,
@@ -258,7 +258,7 @@ Array [
     "semanticCommits": null,
     "separateMajorMinor": true,
     "separateMinorPatch": false,
-    "skipInstalls": true,
+    "skipInstalls": null,
     "statusCheckVerify": false,
     "timezone": null,
     "unpublishSafe": false,
@@ -350,7 +350,7 @@ Array [
     "semanticCommits": null,
     "separateMajorMinor": true,
     "separateMinorPatch": false,
-    "skipInstalls": true,
+    "skipInstalls": null,
     "statusCheckVerify": false,
     "timezone": null,
     "unpublishSafe": false,
@@ -440,7 +440,7 @@ Array [
     "semanticCommits": null,
     "separateMajorMinor": true,
     "separateMinorPatch": false,
-    "skipInstalls": true,
+    "skipInstalls": null,
     "statusCheckVerify": false,
     "timezone": null,
     "unpublishSafe": false,
@@ -532,7 +532,7 @@ Array [
     "semanticCommits": null,
     "separateMajorMinor": true,
     "separateMinorPatch": false,
-    "skipInstalls": true,
+    "skipInstalls": null,
     "statusCheckVerify": false,
     "timezone": null,
     "unpublishSafe": false,
@@ -623,7 +623,7 @@ Array [
     "semanticCommits": null,
     "separateMajorMinor": true,
     "separateMinorPatch": false,
-    "skipInstalls": true,
+    "skipInstalls": null,
     "statusCheckVerify": false,
     "timezone": null,
     "unpublishSafe": false,
@@ -714,7 +714,7 @@ Array [
     "semanticCommits": null,
     "separateMajorMinor": true,
     "separateMinorPatch": false,
-    "skipInstalls": true,
+    "skipInstalls": null,
     "statusCheckVerify": false,
     "timezone": null,
     "unpublishSafe": false,