40 lines
		
	
	
		
			766 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			40 lines
		
	
	
		
			766 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|  | '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; | ||
|  | }; |