From 02290e2f7b06317de852b873f7a0514c79454d65 Mon Sep 17 00:00:00 2001 From: Niklas Mischkulnig <4586894+mischnic@users.noreply.github.com> Date: Wed, 24 Aug 2022 19:39:03 +0200 Subject: [PATCH] Fixup NodePackageManager with builtins --- .../core/package-manager/src/NodePackageManager.js | 12 +++++++----- .../utils/node-resolver-core/src/NodeResolver.js | 8 +++++--- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/packages/core/package-manager/src/NodePackageManager.js b/packages/core/package-manager/src/NodePackageManager.js index 9e5d665f542..39e4f5f1380 100644 --- a/packages/core/package-manager/src/NodePackageManager.js +++ b/packages/core/package-manager/src/NodePackageManager.js @@ -22,6 +22,7 @@ import Module from 'module'; import path from 'path'; import semver from 'semver'; +import {getModuleParts} from '@parcel/utils'; import {getConflictingLocalDependencies} from './utils'; import {installPackage} from './installPackage'; import pkg from '../package.json'; @@ -138,7 +139,7 @@ export class NodePackageManager implements PackageManager { } async resolve( - name: DependencySpecifier, + id: DependencySpecifier, from: FilePath, options?: ?{| range?: ?SemverRange, @@ -147,11 +148,12 @@ export class NodePackageManager implements PackageManager { |}, ): Promise { let basedir = path.dirname(from); - let key = basedir + ':' + name; + let key = basedir + ':' + id; let resolved = cache.get(key); if (!resolved) { + let [name] = getModuleParts(id); try { - resolved = await this.resolver.resolve(name, from); + resolved = await this.resolver.resolve(id, from); } catch (e) { if ( e.code !== 'MODULE_NOT_FOUND' || @@ -189,7 +191,7 @@ export class NodePackageManager implements PackageManager { saveDev: options?.saveDev ?? true, }); - return this.resolve(name, from, { + return this.resolve(id, from, { ...options, shouldAutoInstall: false, }); @@ -230,7 +232,7 @@ export class NodePackageManager implements PackageManager { if (conflicts == null && options?.shouldAutoInstall === true) { await this.install([{name, range}], from); - return this.resolve(name, from, { + return this.resolve(id, from, { ...options, shouldAutoInstall: false, }); diff --git a/packages/utils/node-resolver-core/src/NodeResolver.js b/packages/utils/node-resolver-core/src/NodeResolver.js index ae48002b2af..d5c8ea822a2 100644 --- a/packages/utils/node-resolver-core/src/NodeResolver.js +++ b/packages/utils/node-resolver-core/src/NodeResolver.js @@ -300,9 +300,11 @@ export default class NodeResolver { // ignore } - if (builtin != null) { + // Autoinstall/verify version of builtin polyfills + if (builtin?.range != null) { // This assumes that there are no polyfill packages that are scoped - let packageName = builtin.name.split('/')[0]; + // Append '/' to force this.packageManager to look up the package in node_modules + let packageName = builtin.name.split('/')[0] + '/'; let packageManager = this.packageManager; if (resolved == null) { // Auto install the Node builtin polyfills @@ -383,7 +385,7 @@ export default class NodeResolver { this.projectRoot + '/index', { saveDev: true, - shouldAutoInstall: true, + shouldAutoInstall: this.shouldAutoInstall, range: builtin.range, }, );