From a12341088820c0e7ef6c1c0db3c657f0c2b3943e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ma=C3=ABl=20Nison?= Date: Tue, 30 Jul 2019 12:47:12 +0200 Subject: [PATCH] Implements peerDependenciesMeta PR-URL: https://github.com/npm/cli/pull/224 Credit: @arcanis Close: #224 Reviewed-by: @isaacs --- lib/install/deps.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/lib/install/deps.js b/lib/install/deps.js index 3fe370140adc3..bfc94ae504860 100644 --- a/lib/install/deps.js +++ b/lib/install/deps.js @@ -711,6 +711,12 @@ function resolveWithNewModule (pkg, tree, log, next) { }) } +var isOptionalPeerDep = exports.isOptionalPeerDep = function (tree, pkgname) { + if (!tree.package.peerDependenciesMeta) return + if (!tree.package.peerDependenciesMeta[pkgname]) return + return !!tree.package.peerDependenciesMeta[pkgname].optional +} + var validatePeerDeps = exports.validatePeerDeps = function (tree, onInvalid) { if (!tree.package.peerDependencies) return Object.keys(tree.package.peerDependencies).forEach(function (pkgname) { @@ -719,7 +725,7 @@ var validatePeerDeps = exports.validatePeerDeps = function (tree, onInvalid) { var spec = npa.resolve(pkgname, version) } catch (e) {} var match = spec && findRequirement(tree.parent || tree, pkgname, spec) - if (!match) onInvalid(tree, pkgname, version) + if (!match && !isOptionalPeerDep(tree, pkgname)) onInvalid(tree, pkgname, version) }) }