Create a CLI for R with npm
How to build a CLI for R, with npm.
Background
This blog post was triggered by a discussion on Twitter with Martin
Skarzynski,
who was looking for a way to build a CLI that launches an RScript.
Here’s a way to do this using npm
.
Please note that this blog post won’t teach you how to build the command line tool, it will quickly go over the way to create a system-wide command line interface, using npm.
If you want to learn more about building the utility, see this fantastic series of blog posts by Mark Sellor.
Now, the idea is to have a CLI, i.e. a way to launch your utility with:
$ mytool
And that, system-wide.
What you’ll need
- An R script (script.R) with in it, for example:
#!/usr/bin/env Rscript --vanilla
cli::cat_rule("yeay")
cli::cat_bullet(Sys.time())
npm
, which you can get from there.
Let’s go
Create a new folder, and go inside it.
mkdir cli && cd cli
Create the R Script there.
echo '#!/usr/bin/env Rscript --vanilla' > script.R
echo 'cli::cat_rule("yeay")' >> script.R
echo 'cli::cat_bullet(Sys.time())' >> script.R
Try your script to see if it works:
Rscript script.R
Now launch an npm project:
npm init -y
(You can also run it without the -y
to interactively add information
to the package.json
.)
Now the important part: add a "bin"
value in the package.json
, with
the name of the bin you want to create, and the path to the script,
relatively to the package file. Here is an example of a package.json
(I removed some elements).
{
"name": "cli",
"version": "1.0.0",
"description": "CLI example with npm",
"bin" : {
"clir" : "./script.R"
},
"author": "Colin Fay",
"license": "MIT"
}
Install it globally (need sudo rights):
sudo npm link
And, voilà! Open your terminal, and you’re done!
clir
Other way to go
- See the {littler} implementation
What do you think?