which-command
v0.1.0
Published
Find the absolute path to a command's executable, like the Unix `which` command
Maintainers
Readme
which-command
Find the absolute path to a command's executable, like the Unix
whichcommand
Useful for locating an executable in PATH before spawning it, checking whether a tool is installed, or building your own CLI tooling.
Works cross-platform, including Windows PATHEXT handling and App Execution Aliases.
Install
npm install which-commandUsage
import {whichCommand, whichCommandSync, whichCommandAll} from 'which-command';
await whichCommand('node');
//=> '/usr/local/bin/node'
await whichCommand('does-not-exist');
//=> undefined
whichCommandSync('node');
//=> '/usr/local/bin/node'
await whichCommandAll('node');
//=> ['/usr/local/bin/node', '/opt/homebrew/bin/node']API
whichCommand(command, options?)
Returns a Promise for the absolute path to the first matching executable, or undefined if not found.
whichCommandSync(command, options?)
Same as whichCommand(), but synchronous.
whichCommandAll(command, options?)
Returns a Promise for an array of the absolute paths to all matching executables in PATH order, or an empty array if none are found. Like which -a.
whichCommandAllSync(command, options?)
Same as whichCommandAll(), but synchronous.
command
Type: string
The command name to look for, or a path to check directly.
If it contains a directory separator (like ./foo or /usr/bin/foo), it's resolved directly instead of being searched for in PATH.
options
Type: object
cwd
Type: string
Default: process.cwd()
The directory to resolve relative paths against.
Relative path entries and commands that contain a directory separator are resolved against this. On Windows, this directory is also searched before PATH.
path
Type: string
Default: process.env.PATH
The PATH to search.
Empty entries are ignored. Unlike a POSIX shell, an empty entry is not treated as the current directory, since implicitly searching the current directory is a security risk.
pathExt
Type: string
Default: process.env.PATHEXT
The executable file extensions to look for, as a ;-separated string.
Only used on Windows. Corresponds to the PATHEXT environment variable.
CLI
$ npx which-command --help
Usage
$ which-command <command> …
Options
--all, -a List all matching paths, not just the first
--silent, -s Suppress output; the exit code still reflects whether all commands were found
Examples
$ which-command node
/usr/local/bin/node
$ which-command --all node
/usr/local/bin/node
/opt/homebrew/bin/node
Exits with code 1 if any of the commands could not be found.FAQ
How is it better than the which package?
- Returns
undefinedwhen a command is not found, instead of throwing. whichCommandAll()deduplicates results, so duplicatePATHentries don't produce duplicate matches.- Safer by default: empty
PATHentries are ignored instead of implicitly searching the current directory. - Finds Windows App Execution Aliases (like the
pythonandwingetstubs inWindowsApps), whichwhichskips. - Modern: pure ESM with bundled TypeScript types.
