Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/super-cache-money/make-runnable
Call a node.js module's exports directly from the command line, with arguments.
https://github.com/super-cache-money/make-runnable
Last synced: about 2 months ago
JSON representation
Call a node.js module's exports directly from the command line, with arguments.
- Host: GitHub
- URL: https://github.com/super-cache-money/make-runnable
- Owner: super-cache-money
- License: isc
- Created: 2016-06-15T04:12:42.000Z (about 8 years ago)
- Default Branch: master
- Last Pushed: 2022-12-30T21:32:34.000Z (over 1 year ago)
- Last Synced: 2024-01-31T12:59:12.600Z (5 months ago)
- Language: JavaScript
- Homepage:
- Size: 131 KB
- Stars: 74
- Watchers: 3
- Forks: 9
- Open Issues: 8
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Lists
- my-awesome-stars - super-cache-money/make-runnable - Call a node.js module's exports directly from the command line, with arguments. (JavaScript)
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)
4No. 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 ExampleLet'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!