npm.io
0.1.0 • Published 4 weeks agoCLI

which-command

Licence
MIT
Version
0.1.0
Deps
0
Size
15 kB
Vulns
0
Weekly
0
Stars
16

which-command

Find the absolute path to a command's executable, like the Unix which command

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-command

Usage

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 undefined when a command is not found, instead of throwing.
  • whichCommandAll() deduplicates results, so duplicate PATH entries don't produce duplicate matches.
  • Safer by default: empty PATH entries are ignored instead of implicitly searching the current directory.
  • Finds Windows App Execution Aliases (like the python and winget stubs in WindowsApps), which which skips.
  • Modern: pure ESM with bundled TypeScript types.

Keywords