diff --git a/tools/cli/dev-bundle-helpers.js b/tools/cli/dev-bundle-helpers.js index 0a64995b3d..eafcffe932 100644 --- a/tools/cli/dev-bundle-helpers.js +++ b/tools/cli/dev-bundle-helpers.js @@ -1,20 +1,25 @@ -import { pathJoin, getDevBundle } from '../fs/files'; -import { installNpmModule, moduleDoesResolve } from '../isobuild/meteor-npm.js'; +import { pathJoin, getDevBundle, statOrNull } from '../fs/files'; +import { installNpmModule } from '../isobuild/meteor-npm.js'; export function ensureDependencies(deps) { + const devBundleLib = pathJoin(getDevBundle(), 'lib'); + const devBundleNodeModules = pathJoin(devBundleLib, 'node_modules'); + // Check if each of the requested dependencies resolves, if not // mark them for installation. const needToInstall = Object.create(null); Object.keys(deps).forEach(dep => { - if (!moduleDoesResolve(dep)) { + const pkgDir = pathJoin(devBundleNodeModules, dep); + const pkgStat = statOrNull(pkgDir); + const alreadyInstalled = pkgStat && pkgStat.isDirectory(); + if (!alreadyInstalled) { const versionToInstall = deps[dep]; needToInstall[dep] = versionToInstall; } }); - const devBundleLib = pathJoin(getDevBundle(), 'lib'); - // Install each of the requested modules. - Object.keys(needToInstall) - .forEach(dep => installNpmModule(dep, needToInstall[dep], devBundleLib)); + Object.keys(needToInstall).forEach(dep => { + installNpmModule(dep, needToInstall[dep], devBundleLib); + }); } diff --git a/tools/isobuild/meteor-npm.js b/tools/isobuild/meteor-npm.js index 30e03cbc82..33ab0ea3b6 100644 --- a/tools/isobuild/meteor-npm.js +++ b/tools/isobuild/meteor-npm.js @@ -1053,20 +1053,6 @@ var getShrinkwrappedDependencies = function (dir) { return treeToDependencies(getShrinkwrappedDependenciesTree(dir)); }; -const moduleDoesResolve = meteorNpm.moduleDoesResolve = (dep) => { - try { - require.resolve(dep); - } catch (e) { - if (e.code !== 'MODULE_NOT_FOUND') { - throw e; - } - - return false; - } - - return true; -}; - const installNpmModule = meteorNpm.installNpmModule = (name, version, dir) => { const installArg = utils.isNpmUrl(version) ? version