text: module.exports = loadPrefix
  
  var findPrefix = require('find-npm-prefix')
  var path = require('path')
  
  function loadPrefix (cb) {
    var cli = this.list[0]
  
    Object.defineProperty(this, 'prefix',
      {
        set: function (prefix) {
          var g = this.get('global')
          this[g ? 'globalPrefix' : 'localPrefix'] = prefix
        }.bind(this),
        get: function () {
          var g = this.get('global')
          return g ? this.globalPrefix : this.localPrefix
        }.bind(this),
        enumerable: true
      })
  
    Object.defineProperty(this, 'globalPrefix',
      {
        set: function (prefix) {
          this.set('prefix', prefix)
        }.bind(this),
        get: function () {
          return path.resolve(this.get('prefix'))
        }.bind(this),
        enumerable: true
      })
  
    var p
    Object.defineProperty(this, 'localPrefix',
      { set: function (prefix) { p = prefix },
        get: function () { return p },
      enumerable: true })
  
    // try to guess at a good node_modules location.
    // If we are *explicitly* given a prefix on the cli, then
    // always use that.  otherwise, infer local prefix from cwd.
    if (Object.prototype.hasOwnProperty.call(cli, 'prefix')) {
      p = path.resolve(cli.prefix)
      process.nextTick(cb)
    } else {
      findPrefix(process.cwd()).then((found) => {
        p = found
        cb()
      }, cb)
    }
  }
  