DEV Community

loading...

Create a CLI for R with npm

colinfay profile image Colin Fay Originally published at colinfay.me on ・2 min read

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

Discussion (0)

pic
Editor guide