How to build a CLI for R, with npm.
Background
This blog post was triggered by a discussion on Twitter with MartinSkarzynski, 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 commandline tool, it will quickly go over the way to create a system-widecommand line interface, using npm.
If you want to learn more about building the utility, see thisfantastic series of blogposts 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: <!-- end list -->
#!/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 informationto the package.json
.)
Now the important part: add a "bin"
value in the package.json
, withthe 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
## ── yeay ────────────────────────────────────────────────
## ● 2019-05-22 22:36:29
Other way to go
- See the {littler} implementation
Top comments (0)