; | |
const path = require('path'); | |
const pathKey = require('path-key'); | |
const npmRunPath = options => { | |
options = { | |
cwd: process.cwd(), | |
path: process.env[pathKey()], | |
execPath: process.execPath, | |
...options | |
}; | |
let previous; | |
let cwdPath = path.resolve(options.cwd); | |
const result = []; | |
while (previous !== cwdPath) { | |
result.push(path.join(cwdPath, 'node_modules/.bin')); | |
previous = cwdPath; | |
cwdPath = path.resolve(cwdPath, '..'); | |
} | |
// Ensure the running `node` binary is used | |
const execPathDir = path.resolve(options.cwd, options.execPath, '..'); | |
result.push(execPathDir); | |
return result.concat(options.path).join(path.delimiter); | |
}; | |
module.exports = npmRunPath; | |
// TODO: Remove this for the next major release | |
module.exports.default = npmRunPath; | |
module.exports.env = options => { | |
options = { | |
env: process.env, | |
...options | |
}; | |
const env = {...options.env}; | |
const path = pathKey({env}); | |
options.path = env[path]; | |
env[path] = module.exports(options); | |
return env; | |
}; | |