index.js
 1  'use strict';
 2  const path = require('path');
 3  const pathKey = require('path-key');
 4  
 5  module.exports = opts => {
 6  	opts = Object.assign({
 7  		cwd: process.cwd(),
 8  		path: process.env[pathKey()]
 9  	}, opts);
10  
11  	let prev;
12  	let pth = path.resolve(opts.cwd);
13  	const ret = [];
14  
15  	while (prev !== pth) {
16  		ret.push(path.join(pth, 'node_modules/.bin'));
17  		prev = pth;
18  		pth = path.resolve(pth, '..');
19  	}
20  
21  	// ensure the running `node` binary is used
22  	ret.push(path.dirname(process.execPath));
23  
24  	return ret.concat(opts.path).join(path.delimiter);
25  };
26  
27  module.exports.env = opts => {
28  	opts = Object.assign({
29  		env: process.env
30  	}, opts);
31  
32  	const env = Object.assign({}, opts.env);
33  	const path = pathKey({env});
34  
35  	opts.path = env[path];
36  	env[path] = module.exports(opts);
37  
38  	return env;
39  };