diff --git a/packages/cli/bin/utils.js b/packages/cli/bin/utils.js index 62a081683..a9cdcaf63 100644 --- a/packages/cli/bin/utils.js +++ b/packages/cli/bin/utils.js @@ -6,7 +6,10 @@ const path = require('path'); const chalk = require('chalk'); const EventEmitter = require('events').EventEmitter; const hasYarn = require('has-yarn'); -const { resolveFileInPackage } = require('@pattern-lab/core/src/lib/resolver'); +const { + resolvePackageFolder, + resolveFileInPackage, +} = require('@pattern-lab/core/src/lib/resolver'); /** * @name log @@ -159,7 +162,7 @@ const fetchPackage = packageName => const checkAndInstallPackage = packageName => wrapAsync(function*() { try { - require.resolve(packageName); + resolvePackageFolder(packageName); return true; } catch (err) { debug( diff --git a/packages/core/src/lib/resolver.js b/packages/core/src/lib/resolver.js index 4f63a82ef..ae0bc9fee 100644 --- a/packages/core/src/lib/resolver.js +++ b/packages/core/src/lib/resolver.js @@ -2,12 +2,32 @@ const path = require('path'); +/** + * @func resolvePackageLocations + * Resolves all possible package locations + */ +const resolvePackageLocations = () => { + let lookupPath = path.resolve(process.env.projectDir); + const paths = [lookupPath]; + while (path.dirname(lookupPath) !== lookupPath) { + lookupPath = path.join(lookupPath, '../'); + paths.push(lookupPath); + } + return paths; +}; + /** * @func resolveFileInPackage * Resolves a file inside a package */ const resolveFileInPackage = (packageName, ...pathElements) => { - return require.resolve(path.join(packageName, ...pathElements)); + if (process.env.projectDir) { + return require.resolve(path.join(packageName, ...pathElements), { + paths: resolvePackageLocations(), + }); + } else { + return require.resolve(path.join(packageName, ...pathElements)); + } }; /**