| 'use strict'; | |
| const path = require('path'); | |
| const pathKey = require('path-key'); | |
| module.exports = opts => { | |
| opts = Object.assign({ | |
| cwd: process.cwd(), | |
| path: process.env[pathKey()] | |
| }, opts); | |
| let prev; | |
| let pth = path.resolve(opts.cwd); | |
| const ret = []; | |
| while (prev !== pth) { | |
| ret.push(path.join(pth, 'node_modules/.bin')); | |
| prev = pth; | |
| pth = path.resolve(pth, '..'); | |
| } | |
| // ensure the running `node` binary is used | |
| ret.push(path.dirname(process.execPath)); | |
| return ret.concat(opts.path).join(path.delimiter); | |
| }; | |
| module.exports.env = opts => { | |
| opts = Object.assign({ | |
| env: process.env | |
| }, opts); | |
| const env = Object.assign({}, opts.env); | |
| const path = pathKey({env}); | |
| opts.path = env[path]; | |
| env[path] = module.exports(opts); | |
| return env; | |
| }; |