--- /dev/null
+module.exports = loadPrefix
+
+var findPrefix = require("./find-prefix.js")
+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(), function (er, found) {
+ p = found
+ cb(er)
+ })
+ }
+}