make-runnable

Call a module's exported functions directly from the command line, with arguments.

Usage no npm install needed!

<script type="module">
  import makeRunnable from 'https://cdn.skypack.dev/make-runnable';
</script>

README

Run Exported Functions Directly From The Command Line

What's the quickest way to trial a function you're exporting?

Doing this in your shell?

$node
>require('./your_file').addOneTo(3)
4

No. That's annoying. And you have to repeat it all every time you change your_file.js.

Rather insert the following at the end of your_file.js to expose its exports to the command line:

require('make-runnable');

That's it. Now you can do:

$node your_file.js addOneTo 3
4

Syntax

Call your function with several args:

node [your_file] [function_name] firstArg secondArg 

Or call it with a single object:

node [your_file] [function_name] --key1 value1 --key2 value2 

Full Example

Let's say you have the following file:

your_file.js

module.exports = {
    addTogether: function(x,y){
        return x + y
    }, doSomethingWithObject: function(object){
        object.newKey = "easy AF";
        return object;
    }, simpleValue: 'also works'
};
require('make-runnable');

You can now do the following:

$sh

node your_file.js addTogether 1 2
> 3
node your_file.js doSomethingWithObject --x 1 --y hello
> {x: 1, y: 'hello', newKey: 'easy AF'}
node your_file.js simpleValue
> also works

How does it work?

  1. require.main === module is used to check if the module is being run directly, or imported.
  2. If it's being run directly, then yargs is used to parse process.argv so that the target function may be called with the desired arguments.

What if you want to:

Run a function directly exported by a module, not nested inside an exported object

Just leave off the function name, like so:

say_hello.js

module.exports = function(){console.log('hello');};

$sh

node say_hello.js
> hello

View the output of a function that doesn't print anything

The output is automatically printed.

View the resolved value of a Promise returned by a function

That happens automatically.

Remove the --------make-runnable-output-------- frame from printed output

You can pass in a custom option to make-runnable to remove that, like this:

require('make-runnable/custom')({
    printOutputFrame: false
})

Pass in multiple objects to the function being called

While you can pass a single object, or multiple primitives, multiple objects are not currently supported. PRs welcome!