Create a CLI for R with npm

1 minute(s) read

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

Categories:

Updated:

What do you think?