Node - check existence of command in path
Personally I have found that the command-exists module on npm works great.
Installation
npm install command-exists
Usage
async
var commandExists = require('command-exists');commandExists('ls', function(err, commandExists) { if(commandExists) { // proceed confidently knowing this command is available }});
promise
var commandExists = require('command-exists');// invoked without a callback, it returns a promisecommandExists('ls').then(function(command){ // proceed}).catch(function(){ // command doesn't exist});
sync
var commandExistsSync = require('command-exists').sync;// returns true/false; doesn't throwif (commandExistsSync('ls')) { // proceed} else { // ...}
You could use whereis
in Linux, and where
in Windows, to see if the executable can be found
var isWin = require('os').platform().indexOf('win') > -1;var where = isWin ? 'where' : 'whereis';var spawn = require('child_process').spawn;var out = spawn(where + ' ls', ['/?'], {encoding: 'utf8'});out.on('close', function (code) { console.log('exit code : ' + code);});
DON'T use child_process
just for that, neither packages which use child_process
internally. As Matt already answered, the most straightforward way is just checking under your Path.
Here is a NPM lookpath
package which scans your $PATH
or $Path
.
const { lookpath } = require('lookpath');const p = await lookpath('bash');// "/bin/bash"
This is a Node.js port of exec.LookPath
from Go.
Hope it helps