Try harder to install node packages.

This commit is contained in:
Jelmer Vernooij 2021-03-23 15:41:53 +00:00
parent ddea6f957a
commit 6cb75e75b0

View file

@ -348,18 +348,27 @@ class NpmResolver(Resolver):
return "%s(%r)" % (type(self).__name__, self.session) return "%s(%r)" % (type(self).__name__, self.session)
def install(self, requirements): def install(self, requirements):
from ..requirements import NodePackageRequirement from ..requirements import (
NodePackageRequirement,
NodeModuleRequirement,
BinaryRequirement,
)
missing = [] missing = []
for requirement in requirements: for requirement in requirements:
if isinstance(requirement, BinaryRequirement):
try:
package = NPM_COMMAND_PACKAGES[requirement.command]
except KeyError:
pass
else:
requirement = NodePackageRequirement(package)
if isinstance(requirement, NodeModuleRequirement):
# TODO: Is this legit?
requirement = NodePackageRequirement(requirement.module.split('/')[0])
if not isinstance(requirement, NodePackageRequirement): if not isinstance(requirement, NodePackageRequirement):
missing.append(requirement) missing.append(requirement)
continue continue
try:
package = NPM_COMMAND_PACKAGES[requirement.command]
except KeyError:
missing.append(requirement)
continue
self.session.check_call(["npm", "-g", "install", package]) self.session.check_call(["npm", "-g", "install", package])
if missing: if missing:
raise UnsatisfiedRequirements(missing) raise UnsatisfiedRequirements(missing)