# make-runnable

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

Latest version **1.4.1** (published 2022-12-18) · ISC license · 0 weekly downloads

## Install

```sh
npm install make-runnable
pnpm add make-runnable
yarn add make-runnable
bun add make-runnable
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 1.4.1 |
| Published | 2022-12-18 |
| First published | 2016-06-15 |
| Weekly downloads | 0 |
| License | ISC |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 2 |
| Unpacked size | 12.7 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 75 |
| Author | Arjun Khoosal |
| Maintainers | super-cache-money |
| Keywords | call, calling, run, module, export, function, CL, command, line, expose, shell |

## Links

- npm: https://www.npmjs.com/package/make-runnable
- Repository: https://github.com/super-cache-money/make-runnable
- Homepage: https://github.com/super-cache-money/make-runnable#readme
- Issues: https://github.com/super-cache-money/make-runnable/issues
- npm.io page: https://npm.io/package/make-runnable

## Dependencies (2)

- [yargs](https://npm.io/package/yargs.md) ^16.2.0
- [bluebird](https://npm.io/package/bluebird.md) ^3.5.0

## Alternatives

- [@salesforce/cli](https://npm.io/package/@salesforce/cli.md) — 389.7K weekly downloads
- [@mintlify/cli](https://npm.io/package/@mintlify/cli.md) — 208.9K weekly downloads
- [@grafana/e2e-selectors](https://npm.io/package/@grafana/e2e-selectors.md) — 128.7K weekly downloads
- [mintlify](https://npm.io/package/mintlify.md) — 112.0K weekly downloads
- [@intlayer/cli](https://npm.io/package/@intlayer/cli.md) — 22.8K weekly downloads

## Recent versions

- 1.4.1 (latest) — 2022-12-18
- 1.4.0 — 2022-10-12
- 1.3.10 — 2021-06-12
- 1.3.9 — 2021-05-17
- 1.3.8 — 2020-09-17
- 1.3.6 — 2017-06-11
- 1.3.5 — 2017-06-10
- 1.3.4 — 2017-06-10
- 1.3.3 — 2017-06-10
- 1.3.2 — 2017-06-10
- 1.3.1 — 2017-06-10
- 1.3.0 — 2017-06-10
- 1.2.1 — 2017-06-04
- 1.1.1 — 2017-02-13
- 1.1.0 — 2017-02-13
- … 9 more at https://npm.io/package/make-runnable/versions

## 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](https://www.npmjs.com/package/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
})
```

### Remove printed output
You can pass in a custom option to `make-runnable` to hide the output message and frame generated by `make-runnable`:
```
require('make-runnable/custom')({
    printOutput: false
})
```

### Remove printed errors
You can pass in a custom option to `make-runnable` to hide error messages and frames generated by `make-runnable`:
```
require('make-runnable/custom')({
    printErrorOutput: 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!

---
_Source: https://npm.io/package/make-runnable · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
