Single File Code, or sfc, allows to execute NodeJS scripts and methods with its dependencies. defined in the script itself. Either via cli or via module
Instead of having a package.json file and installing the dependencies via npm commands, you can specify the dependencies in your script comments.
SFC will take care of installing the dependencies.
/**
* @dependency lodash latest
*/
require('lodash').map([1,2,3,4], n => console.log(n))
/**
* @dependency faker latest
*/
let fake = require('faker').fake('{{name.lastName}}, {{name.firstName}}')
console.log(fake)
It supports --watch
for your development-phase things.
Use your terminal to install sfc as a globally availabe package.
npm i nodesfc -g
Usage: nodesfc [options] <file>
Options:
-V, --version output the version number
-d, --dryrun Removes node_modules and package-lock.json before installing dependencies.
--debug Enables debug messages.
-w, --watch Watch for changes in the file
--noupdate Opt-out of update version check
-h, --help display help for command
Example:
$ nodesfc --watch example/file.js
Specifying dependencies:
/**
* @dependency lodash latest
*/
To get help, execute:
nodesfc -h
You can invoke a JS file in two different ways.
This will return the method's result - as it is.
let lib = require('nodesfc')
let r = await lib.init({
method: 'handler', // Name of the method to be executed
methodArgs: ["hello", "world"], // List of parameters to apply
file: './export-handler.js'
})
console.log(r)
// { firstParameter: 'hello', secondParameter: 'world' }
The init
method returns a Promise with the method's result.
This will return the full std output as an array.
require('nodesfc')
.init({
file: 'my_javascript_file.js', // File to execute
env: { // Optional k->v pairs of custom environment variables
CHARACTER: 'Jon Snow'
}
})
.then(result => console.log({result}))
/*
{
"stdLines": [
{
"output": "1",
"err": false,
"date": "2019-08-14T11:47:21.821Z"
},
{
"output": "2",
"err": false,
"date": "2019-08-14T11:47:21.821Z"
},
{
"output": "3",
"err": false,
"date": "2019-08-14T11:47:21.821Z"
},
{
"output": "4",
"err": false,
"date": "2019-08-14T11:47:21.821Z"
},
{
"output": "Boyle, Alek",
"err": false,
"date": "2019-08-14T11:47:23.063Z"
}
],
"code": 0
}
*/
The init
method returns a Promise with an object with the properties:
stdLines
being an array of objects containing the STD outputs for both errors and logs. In the same order as they were triggered.output
string - the actual text loggederr
boolean - determines if the log was sent to std-err or not
code
number - the execution exit code.
Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.