From b610af469d613c032b0369567c84ad9be83c70a6 Mon Sep 17 00:00:00 2001 From: Rebecca Turner Date: Wed, 1 Aug 2018 23:06:56 -0700 Subject: [PATCH 1/4] inflate-shrinkwrap: Insure modules deep in a linked tree are isInLink Fixes: https://npm.community/t/npm-install-for-package-with-local-dependency-fails/754 Credit: @iarna Credit: @jhecking --- lib/install/inflate-shrinkwrap.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/install/inflate-shrinkwrap.js b/lib/install/inflate-shrinkwrap.js index bf1ab7065724c..395cc11191309 100644 --- a/lib/install/inflate-shrinkwrap.js +++ b/lib/install/inflate-shrinkwrap.js @@ -177,7 +177,7 @@ function makeFakeChild (name, topPath, tree, sw, requested) { realpath: requested.type === 'directory' ? requested.fetchSpec : childPath(tree.realpath, pkg), location: (tree.location === '/' ? '' : tree.location + '/') + pkg.name, isLink: requested.type === 'directory', - isInLink: tree.isLink, + isInLink: tree.isLink || tree.isInLink, swRequires: sw.requires }) tree.children.push(child) From e6942961e5a0fe04037f1f45989e4287d7f62f1f Mon Sep 17 00:00:00 2001 From: Rebecca Turner Date: Wed, 1 Aug 2018 23:42:14 -0700 Subject: [PATCH 2/4] shrinkwrap: Don't iterate into linked deps --- lib/shrinkwrap.js | 5 ++++- test/tap/spec-local-specifiers.js | 4 +--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/lib/shrinkwrap.js b/lib/shrinkwrap.js index 90a4426523cab..80e4cd17955d0 100644 --- a/lib/shrinkwrap.js +++ b/lib/shrinkwrap.js @@ -110,6 +110,8 @@ function shrinkwrapDeps (deps, top, tree, seen) { var childIsOnlyDev = isOnlyDev(child) var pkginfo = deps[moduleName(child)] = {} var requested = getRequested(child) || child.package._requested || {} + var linked = child.isLink || child.isInLInk + var linkedFromHere = linked && path.relative(top.realpath, child.realpath)[0] !== '.' pkginfo.version = childVersion(top, child, requested) if (requested.type === 'git' && child.package._from) { pkginfo.from = child.package._from @@ -139,7 +141,8 @@ function shrinkwrapDeps (deps, top, tree, seen) { pkginfo.requires[moduleName(required)] = childRequested(top, required, requested) }) } - if (child.children.length) { + // only iterate into links when they're + if (child.children.length && (!child.isLink || linkedFromHere)) { pkginfo.dependencies = {} shrinkwrapDeps(pkginfo.dependencies, top, child, seen) } diff --git a/test/tap/spec-local-specifiers.js b/test/tap/spec-local-specifiers.js index d149b7ea0ea3a..3601eee5f3c5f 100644 --- a/test/tap/spec-local-specifiers.js +++ b/test/tap/spec-local-specifiers.js @@ -585,9 +585,7 @@ test('save behavior', function (t) { var deps = pjson.dependencies || {} t.is(deps['sb-transitive'], 'file:../sb-transitive', 'package.json') var sdep = shrinkwrap.dependencies['sb-transitive'] || {} - var tdep = sdep.dependencies.sbta - t.like(tdep, {bundled: true, version: 'file:../sb-transitive/sbta'}, 'npm-shrinkwrap.json transitive dep') - t.like(sdep, {bundled: null, version: 'file:../sb-transitive'}, 'npm-shrinkwrap.json direct dep') + t.like(sdep, {bundled: null, dependencies: null, version: 'file:../sb-transitive'}, 'npm-shrinkwrap.json direct dep') t.done() }) }) From 03dade920bfeb801bfcb99c5b40b76ac5d5bb679 Mon Sep 17 00:00:00 2001 From: Rebecca Turner Date: Wed, 1 Aug 2018 23:41:48 -0700 Subject: [PATCH 3/4] shrinkwrap: Don't record linked deps as bundled --- lib/shrinkwrap.js | 4 ++-- test/tap/shrinkwrap-local-dependency.js | 3 +-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/lib/shrinkwrap.js b/lib/shrinkwrap.js index 80e4cd17955d0..f860c23df760e 100644 --- a/lib/shrinkwrap.js +++ b/lib/shrinkwrap.js @@ -116,7 +116,7 @@ function shrinkwrapDeps (deps, top, tree, seen) { if (requested.type === 'git' && child.package._from) { pkginfo.from = child.package._from } - if (child.fromBundle || child.isInLink) { + if (child.fromBundle && !linked) { pkginfo.bundled = true } else { if (isRegistry(requested)) { @@ -141,7 +141,7 @@ function shrinkwrapDeps (deps, top, tree, seen) { pkginfo.requires[moduleName(required)] = childRequested(top, required, requested) }) } - // only iterate into links when they're + // iterate into children on non-links and links contained within the top level package if (child.children.length && (!child.isLink || linkedFromHere)) { pkginfo.dependencies = {} shrinkwrapDeps(pkginfo.dependencies, top, child, seen) diff --git a/test/tap/shrinkwrap-local-dependency.js b/test/tap/shrinkwrap-local-dependency.js index 58974ad72431a..d1c33b99a5a0b 100644 --- a/test/tap/shrinkwrap-local-dependency.js +++ b/test/tap/shrinkwrap-local-dependency.js @@ -20,8 +20,7 @@ var shrinkwrap = { version: 'file:' + unixFormatPath(path.join('mods', 'mod2')), dependencies: { mod1: { - version: 'file:' + unixFormatPath(path.join('mods', 'mod1')), - bundled: true + version: 'file:' + unixFormatPath(path.join('mods', 'mod1')) } } } From 239a4aae6c359f8e8b77afc7d9f792ac5715e898 Mon Sep 17 00:00:00 2001 From: Rebecca Turner Date: Tue, 11 Sep 2018 15:19:49 -0700 Subject: [PATCH 4/4] Update shrinkwrap.js --- lib/shrinkwrap.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/shrinkwrap.js b/lib/shrinkwrap.js index f860c23df760e..5495892a25afb 100644 --- a/lib/shrinkwrap.js +++ b/lib/shrinkwrap.js @@ -110,7 +110,7 @@ function shrinkwrapDeps (deps, top, tree, seen) { var childIsOnlyDev = isOnlyDev(child) var pkginfo = deps[moduleName(child)] = {} var requested = getRequested(child) || child.package._requested || {} - var linked = child.isLink || child.isInLInk + var linked = child.isLink || child.isInLink var linkedFromHere = linked && path.relative(top.realpath, child.realpath)[0] !== '.' pkginfo.version = childVersion(top, child, requested) if (requested.type === 'git' && child.package._from) {