Skip to content

Commit

Permalink
fix: fix handling of optional dev packages
Browse files Browse the repository at this point in the history
  • Loading branch information
medikoo committed Nov 9, 2018
1 parent 51ffd5b commit 1a2255e
Showing 1 changed file with 19 additions and 13 deletions.
32 changes: 19 additions & 13 deletions lib/install-package.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,19 @@ const { resolve } = require("path")
const ongoingMap = new Map();
const done = new Set();

const setupDependencies = async (packageName, { packagesPath, packagesMeta, hooks }) => {
const setupDependency = async (packagePath, dependencyName, configuration) => {
const { packagesMeta } = configuration;
if (done.has(dependencyName)) return;
if (ongoingMap.has(dependencyName)) {
ongoingMap.get(dependencyName).push(() => setupNpmLink(packagePath, dependencyName));
return;
}
if (packagesMeta[dependencyName]) await module.exports(dependencyName, configuration);
await setupNpmLink(packagePath, dependencyName);
};

const setupDependencies = async (packageName, configuration) => {
const { packagesMeta, packagesPath } = configuration;
const packagePath = resolve(packagesPath, packageName);
const packagePkgJson = require(resolve(packagePath, "package.json"));
const dependencies = new Set(
Expand All @@ -27,23 +39,17 @@ const setupDependencies = async (packageName, { packagesPath, packagesMeta, hook

log.info("setup dependencies of %s", packageName);
for (const dependencyName of dependencies) {
if (!done.has(dependencyName)) {
if (ongoingMap.has(dependencyName)) {
ongoingMap
.get(dependencyName)
.push(() => setupNpmLink(packagePath, dependencyName));
continue;
} else if (packagesMeta[dependencyName]) {
await module.exports(dependencyName, { packagesPath, packagesMeta, hooks });
}
}
await setupNpmLink(packagePath, dependencyName);
await setupDependency(packagePath, dependencyName, configuration);
}

// Eventual optional dependencies
for (const dependencyName of Object.keys(packagePkgJson.optionalDependencies || {})) {
if (dependencyName === packageName) continue;
if (dependencies.has(dependencyName)) continue;
if (packagesMeta[dependencyName]) {
await setupDependency(packagePath, dependencyName, configuration);
continue;
}
try { await setupNpmLink(packagePath, dependencyName); }
catch (error) {
log.error(
Expand Down Expand Up @@ -94,7 +100,7 @@ module.exports = ee(async (packageName, { packagesPath, packagesMeta, hooks }) =
await cleanupNpmInstall(packagePath);

// Setup dependencies
await setupDependencies(packageName, { packagesPath, packagesMeta, hooks });
const dependencies = await setupDependencies(packageName, configuration);

// Link package
if (!(await isPackageLinked(packageName))) await linkPackage(packagePath, packageName);
Expand Down

0 comments on commit 1a2255e

Please sign in to comment.