diff --git a/packages/core/parcel-bundler/src/Resolver.js b/packages/core/parcel-bundler/src/Resolver.js index d5037782eaa..c9be2d3b68f 100755 --- a/packages/core/parcel-bundler/src/Resolver.js +++ b/packages/core/parcel-bundler/src/Resolver.js @@ -4,6 +4,7 @@ const path = require('path'); const {isGlob} = require('./utils/glob'); const fs = require('@parcel/fs'); const micromatch = require('micromatch'); +const getModuleParts = require('./utils/getModuleParts'); const EMPTY_SHIM = require.resolve('./builtins/_empty'); @@ -104,7 +105,7 @@ class Resolver { // If we couldn't resolve the node_modules path, just return the module name info if (!resolved) { - let parts = this.getModuleParts(filename); + let parts = getModuleParts(filename); resolved = { moduleName: parts[0], subPath: parts[1] @@ -171,7 +172,7 @@ class Resolver { return {filePath: builtins[filename]}; } - let parts = this.getModuleParts(filename); + let parts = getModuleParts(filename); let root = path.parse(dir).root; while (dir !== root) { @@ -374,7 +375,7 @@ class Resolver { alias = this.lookupAlias(aliases, filename, dir); if (alias == null) { // If it didn't match, try only the module name. - let parts = this.getModuleParts(filename); + let parts = getModuleParts(filename); alias = this.lookupAlias(aliases, parts[0], dir); if (typeof alias === 'string') { // Append the filename back onto the aliased module. @@ -438,16 +439,6 @@ class Resolver { let pkg = await this.findPackage(dir); return this.resolveAliases(filename, pkg); } - - getModuleParts(name) { - let parts = path.normalize(name).split(path.sep); - if (parts[0].charAt(0) === '@') { - // Scoped module (e.g. @scope/module). Merge the first two parts back together. - parts.splice(0, 2, `${parts[0]}/${parts[1]}`); - } - - return parts; - } } module.exports = Resolver; diff --git a/packages/core/parcel-bundler/src/utils/getModuleParts.js b/packages/core/parcel-bundler/src/utils/getModuleParts.js new file mode 100644 index 00000000000..848876c9959 --- /dev/null +++ b/packages/core/parcel-bundler/src/utils/getModuleParts.js @@ -0,0 +1,11 @@ +const path = require('path'); + +module.exports = function(name) { + let parts = path.normalize(name).split(path.sep); + if (parts[0].charAt(0) === '@') { + // Scoped module (e.g. @scope/module). Merge the first two parts back together. + parts.splice(0, 2, `${parts[0]}/${parts[1]}`); + } + + return parts; +}; diff --git a/packages/core/parcel-bundler/src/utils/localRequire.js b/packages/core/parcel-bundler/src/utils/localRequire.js index 24f20da9345..42a2fd6c950 100644 --- a/packages/core/parcel-bundler/src/utils/localRequire.js +++ b/packages/core/parcel-bundler/src/utils/localRequire.js @@ -2,6 +2,7 @@ const {dirname} = require('path'); const {promisify} = require('@parcel/utils'); const resolve = promisify(require('resolve')); const installPackage = require('./installPackage'); +const getModuleParts = require('./getModuleParts'); const cache = new Map(); @@ -19,7 +20,8 @@ async function localResolve(name, path, triedInstall = false) { resolved = await resolve(name, {basedir}); } catch (e) { if (e.code === 'MODULE_NOT_FOUND' && !triedInstall) { - await installPackage(name, path); + const packageName = getModuleParts(name)[0]; + await installPackage(packageName, path); return await localResolve(name, path, true); } throw e;