shx
is a wrapper around ShellJS Unix
commands, providing an easy solution for simple Unix-like, cross-platform
commands in npm package scripts.
- ShellJS: Good for writing long scripts, all in JS, running via NodeJS (e.g.
node myScript.js
). - shx: Good for writing one-off commands in npm package scripts (e.g.
"clean": "shx rm -rf out/"
).
npm install shx --save-dev
This will allow using shx
in your package.json
scripts.
If you'd like to use shx
on the command line, install it globally with the -g
flag.
The following code can be run either a Unix or Windows command line:
$ shx pwd # ShellJS commands are supported automatically
/home/username/path/to/dir
$ shx ls # files are outputted one per line
file.txt
file2.txt
$ shx rm *.txt # a cross-platform way to delete files!
$ shx ls
$ shx echo "Hi there!"
Hi there!
$ shx touch helloworld.txt
$ shx cp helloworld.txt foobar.txt
$ shx mkdir sub
$ shx ls
foobar.txt
helloworld.txt
sub
$ shx rm -r sub # options work as well
$ shx --silent ls fakeFileName # silence error output
All commands internally call the ShellJS corresponding function, guaranteeing cross-platform compatibility.
ShellJS is good for writing long scripts. If you want to write bash-like, platform-independent scripts, we recommend you go with that.
However, shx
is ideal for one-liners inside package.json
:
{
"scripts": {
"clean": "shx rm -rf build dist && shx echo Done"
}
}
Due to the differences in execution environments between ShellJS and shx
(JS vs CLI) some commands are not supported:
Unsupported command | Recommend workaround |
---|---|
shx cd |
Just use plain old cd (it's the same on windows too) |
shx pushd |
No workaround |
shx popd |
No workaround |
shx dirs |
No workaround |
shx set |
See below |
shx exit |
Just use plain old exit |
shx exec |
Instead of shx exec cmd , just use plain old cmd |
shx ShellString |
No workaround (but why would you want this?) |
Shx allows you to modify its behavior by passing arguments. Here's a list of supported options:
set flag |
shell.config setting |
shx command | Effect |
---|---|---|---|
-e |
config.fatal = true |
Not supported | Exit upon first error |
-v |
config.verbose = true |
shx --verbose cd foo |
Log the command as it's run |
-f |
config.noglob = true |
shx --noglob cat '*.txt' |
Don't expand wildcards |
N/A | config.silent = true |
shx --silent cd noexist |
Don't show error output |
Nate Fischer | Ari Porad | Levi Thomason |