@zkochan/pnpm
Version:
A fast implementation of npm install
37 lines (32 loc) • 1.43 kB
JavaScript
const path = require('path')
const readPkgUp = require('read-pkg-up')
const relSymlink = require('../fs/rel_symlink')
const installPkgDeps = require('./install_pkg_deps')
const resolveGlobalPkgPath = require('../resolve_global_pkg_path')
const linkPkgBins = require('../install/link_bins').linkPkgBins
const mkdirp = require('../fs/mkdirp')
module.exports = { linkFromRelative, linkFromGlobal, linkToGlobal }
function linkFromRelative (linkTo, opts) {
opts = opts || {}
const cwd = opts.cwd || process.cwd()
const linkedPkgPath = path.resolve(cwd, linkTo)
const currentModules = path.resolve(cwd, 'node_modules')
return installPkgDeps(Object.assign({}, opts, { cwd: linkedPkgPath }))
.then(_ => mkdirp(currentModules))
.then(_ => readPkgUp({ cwd: linkedPkgPath }))
.then(pkg => relSymlink(linkedPkgPath, path.resolve(currentModules, pkg.pkg.name)))
.then(_ => linkPkgBins(currentModules, linkedPkgPath))
}
function linkFromGlobal (pkgName, opts) {
const globalPkgPath = resolveGlobalPkgPath(opts.globalPath)
const linkedPkgPath = path.join(globalPkgPath, 'node_modules', pkgName)
return linkFromRelative(linkedPkgPath, opts)
}
function linkToGlobal (opts) {
const globalPkgPath = resolveGlobalPkgPath(opts.globalPath)
const cwd = opts.cwd || process.cwd()
return linkFromRelative(cwd, Object.assign({
cwd: globalPkgPath
}, opts))
}