mirror of
https://github.com/bower/bower.git
synced 2026-01-22 20:58:08 -05:00
40 lines
1.4 KiB
JavaScript
40 lines
1.4 KiB
JavaScript
var Q = require('q');
|
|
var Config = require('bower-config');
|
|
var createLink = require('../util/createLink');
|
|
var readJson = require('../util/readJson');
|
|
var path = require('path');
|
|
var fs = require('graceful-fs');
|
|
|
|
module.exports.link = function (packages, config, logger) {
|
|
var rootComponentsDir = path.join(config.cwd, config.directory);
|
|
|
|
// create links for new packages and make sure that existing
|
|
// ones has all dependencies linked
|
|
var promises = Object.keys(packages).map(function (depName) {
|
|
var dep = packages[depName];
|
|
var depPath = dep.canonicalDir || path.join(rootComponentsDir, dep.name);
|
|
var conf = Config.read(depPath);
|
|
var componentsDir = path.join(conf.cwd, conf.directory);
|
|
|
|
return readJson(depPath)
|
|
.spread(function (json, deprecated, assumed) {
|
|
if (json.dependencies) {
|
|
return Q.all(Object.keys(json.dependencies || {}).map(function (d) {
|
|
var dst = path.join(componentsDir, d);
|
|
var src = path.join(rootComponentsDir, d);
|
|
|
|
return Q.nfcall(fs.stat, dst)
|
|
.fail(function () {
|
|
logger.info('dep-link', d, {
|
|
name: json.name + '#' + d
|
|
});
|
|
return createLink(src, dst, {relative: true});
|
|
});
|
|
}));
|
|
}
|
|
});
|
|
});
|
|
|
|
return Q.all(promises);
|
|
};
|