diff --git a/lib/install/is-only-dev.js b/lib/install/is-only-dev.js index 2877c61a227d0..804497393eaa3 100644 --- a/lib/install/is-only-dev.js +++ b/lib/install/is-only-dev.js @@ -28,9 +28,10 @@ function andIsOnlyDev (name, seen) { return isDev && !isProd } else { if (seen.has(req)) return true - seen = new Set(seen) seen.add(req) - return isOnlyDev(req, seen) + const result = isOnlyDev(req, seen) + seen.delete(req) + return result } } } diff --git a/lib/install/is-only-optional.js b/lib/install/is-only-optional.js index 81e227bae7a89..ea27eadcfa809 100644 --- a/lib/install/is-only-optional.js +++ b/lib/install/is-only-optional.js @@ -11,11 +11,12 @@ function isOptional (node, seen) { if (seen.has(node) || node.requiredBy.length === 0) { return false } - seen = new Set(seen) seen.add(node) const swOptional = node.fromShrinkwrap && node.package._optional - return node.requiredBy.every(function (req) { + const result = node.requiredBy.every(function (req) { if (req.fakeChild && swOptional) return true return isOptDep(req, moduleName(node)) || isOptional(req, seen) }) + seen.delete(node) + return result }