From d4aec0ff767aca9509cd4345ca5fb526c987cee4 Mon Sep 17 00:00:00 2001
From: Rhys Arkins <rhys@arkins.net>
Date: Fri, 17 Aug 2018 08:22:41 +0200
Subject: [PATCH] feat(npm): perform full install if file: references found
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

npm’s —package-lock-only implementation seems to have a bug and produces incorrect lock files when file: references are present. If file: dependencies are detected, skipInstalls is set to false.

Closes #2401
---
 lib/manager/npm/extract/index.js                          | 3 +++
 test/manager/npm/extract/__snapshots__/index.spec.js.snap | 5 +++++
 2 files changed, 8 insertions(+)

diff --git a/lib/manager/npm/extract/index.js b/lib/manager/npm/extract/index.js
index 2c2224f5a3..90b0fd9314 100644
--- a/lib/manager/npm/extract/index.js
+++ b/lib/manager/npm/extract/index.js
@@ -95,6 +95,7 @@ async function extractDependencies(content, packageFile, config) {
   let lernaDir;
   let lernaPackages;
   let lernaClient;
+  let skipInstalls = true;
   const lernaJson = JSON.parse(
     await platform.getFile(upath.join(path.dirname(packageFile), 'lerna.json'))
   );
@@ -138,6 +139,7 @@ async function extractDependencies(content, packageFile, config) {
             }
           } else if (dep.currentValue.startsWith('file:')) {
             dep.skipReason = 'file';
+            skipInstalls = false;
           } else if (semver.isValid(dep.currentValue)) {
             dep.purl = `pkg:npm/${depName.replace('@', '%40')}`;
             if (dep.currentValue === '*') {
@@ -192,6 +194,7 @@ async function extractDependencies(content, packageFile, config) {
     lernaDir,
     lernaClient,
     lernaPackages,
+    skipInstalls,
     yarnWorkspacesPackages,
   };
 }
diff --git a/test/manager/npm/extract/__snapshots__/index.spec.js.snap b/test/manager/npm/extract/__snapshots__/index.spec.js.snap
index 06582bb4bf..6a384c9766 100644
--- a/test/manager/npm/extract/__snapshots__/index.spec.js.snap
+++ b/test/manager/npm/extract/__snapshots__/index.spec.js.snap
@@ -102,6 +102,7 @@ Object {
   "packageJsonType": "app",
   "packageJsonVersion": undefined,
   "pnpmShrinkwrap": undefined,
+  "skipInstalls": false,
   "yarnLock": undefined,
   "yarnWorkspacesPackages": undefined,
   "yarnrc": undefined,
@@ -201,6 +202,7 @@ Object {
   "packageJsonType": "app",
   "packageJsonVersion": "1.0.0",
   "pnpmShrinkwrap": undefined,
+  "skipInstalls": true,
   "yarnLock": "yarn.lock",
   "yarnWorkspacesPackages": undefined,
   "yarnrc": undefined,
@@ -219,6 +221,7 @@ Object {
   "packageJsonType": "app",
   "packageJsonVersion": "0.0.8",
   "pnpmShrinkwrap": undefined,
+  "skipInstalls": true,
   "yarnLock": undefined,
   "yarnWorkspacesPackages": Array [
     "packages/*",
@@ -320,6 +323,7 @@ Object {
   "packageJsonType": "app",
   "packageJsonVersion": "1.0.0",
   "pnpmShrinkwrap": undefined,
+  "skipInstalls": true,
   "yarnLock": undefined,
   "yarnWorkspacesPackages": undefined,
   "yarnrc": undefined,
@@ -419,6 +423,7 @@ Object {
   "packageJsonType": "app",
   "packageJsonVersion": "1.0.0",
   "pnpmShrinkwrap": undefined,
+  "skipInstalls": true,
   "yarnLock": undefined,
   "yarnWorkspacesPackages": undefined,
   "yarnrc": undefined,
-- 
GitLab