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,