From db472ec79bb4ca604f84ca06828b37712ee7abc2 Mon Sep 17 00:00:00 2001 From: zkochan Date: Fri, 16 Jun 2017 00:47:30 +0300 Subject: [PATCH] perf: decrease fs operations cound during linking bins --- src/link/index.ts | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/link/index.ts b/src/link/index.ts index 83cbbc635a..5243f670b8 100644 --- a/src/link/index.ts +++ b/src/link/index.ts @@ -7,7 +7,7 @@ import R = require('ramda') import pLimit = require('p-limit') import {InstalledPackage} from '../install/installMultiple' import {InstalledPackages, TreeNode, PackageContentInfo} from '../api/install' -import linkBins from './linkBins' +import linkBins, {linkPkgBins} from './linkBins' import {Package, Dependencies} from '../types' import {Resolution} from '../resolve' import resolvePeers, {DependencyTreeNode, DependencyTreeNodeMap} from './resolvePeers' @@ -201,7 +201,16 @@ async function linkAllBins ( return Promise.all( pkgs.map(dependency => limitLinking(async () => { const binPath = path.join(dependency.hardlinkedLocation, 'node_modules', '.bin') - await linkBins(dependency.modules, binPath, dependency.name) + + const childrenToLink = opts.optional + ? dependency.children + : dependency.children.filter(child => !dependency.optionalDependencies.has(pkgMap[child].name)) + + await Promise.all( + R.props(childrenToLink, pkgMap) + .filter(child => child.installable) + .map(child => linkPkgBins(path.join(dependency.modules, child.name), binPath)) + ) // link also the bundled dependencies` bins if (dependency.hasBundledDependencies) {