123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- "use strict";
- const fs = require("fs-extra");
- const path = require("path");
- const pMap = require("p-map");
- const { Package } = require("@lerna/package");
- const { createSymlink } = require("@lerna/create-symlink");
- module.exports.symlinkBinary = symlinkBinary;
- /**
- * Symlink bins of srcPackage to node_modules/.bin in destPackage
- * @param {Object|string} srcPackageRef
- * @param {Object|string} destPackageRef
- * @returns {Promise}
- */
- function symlinkBinary(srcPackageRef, destPackageRef) {
- return Promise.all([Package.lazy(srcPackageRef), Package.lazy(destPackageRef)]).then(
- ([srcPackage, destPackage]) => {
- const actions = Object.keys(srcPackage.bin).map((name) => {
- const srcLocation = srcPackage.contents
- ? path.resolve(srcPackage.location, srcPackage.contents)
- : srcPackage.location;
- const src = path.join(srcLocation, srcPackage.bin[name]);
- const dst = path.join(destPackage.binLocation, name);
- // Symlink all declared binaries, even if they don't exist (yet). We will
- // assume the package author knows what they're doing and that the binaries
- // will be generated during a later build phase (potentially source compiled from
- // another language).
- return { src, dst };
- });
- if (actions.length === 0) {
- return Promise.resolve();
- }
- return fs.mkdirp(destPackage.binLocation).then(() =>
- pMap(actions, (meta) => {
- if (meta) {
- return createSymlink(meta.src, meta.dst, "exec");
- }
- })
- );
- }
- );
- }
|