You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
			
				
					40 lines
				
				766 B
			
		
		
			
		
	
	
					40 lines
				
				766 B
			| 
								 
											4 years ago
										 
									 | 
							
								'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;
							 | 
						||
| 
								 | 
							
								};
							 |