Offload your heavy lifting to a daemon
npm install core_d!Build Status
[![SemVer]](http://semver.org)
[![License]](https://github.com/mantoni/core\_d.js/blob/master/LICENSE)
Offload your heavy lifting to a daemon. Extracted from [eslint_d][].
This will install the core_d as a dependency:
``bash`
❯ npm install core_d
You need to create a main file that controls the daemon and a service.js file
which will run in the background.
The main file should look something like this:
`js
const cmd = process.argv[2];
process.env.CORE_D_TITLE = 'your_d';
process.env.CORE_D_DOTFILE = '.your_d';
process.env.CORE_D_SERVICE = require.resolve('./your-service');
// optional to get logging from the child process
process.env.CORE_D_DEBUG = 'true';
const core_d = require('core_d');
if (cmd === 'start'
|| cmd === 'stop'
|| cmd === 'restart'
|| cmd === 'status') {
core_d[cmd]();
return;
}
core_d.invoke(process.argv.slice(2));
`
The service.js file must expose an invoke function like this:
`js`
/*
* The core_d service entry point.
*/
exports.invoke = function (cwd, args, text, callback) {
callback(null, 'Your response');
};
The first time you call core_d.invoke(...), a little server is started in theinvoke
background and bound to a random port. The port number is stored along with a
security token in the configured dotfile. Your services method isinvoke
called with the same arguments. Later calls to will be executed on thecore_d
same instance. So if you have a large app that takes a long time to load, but
otherwise responds quickly, and you're using it frequently, like linting a
file, then can give your tool a performance boost.
The core_d client exposes these functions:
- start(): Starts the background server and create the dotfile. It's notinvoke
necessary to call this since will start the server if it's notstop()
already running.
- : Stops the background server and removed the dotfile.restart()
- : Stops and starts the background server again.status()
- : Prints a status message saying whether the server is running orgetStatus()
not. If the server is running and your service implements , theinvoke(args[, text])
return value will be printed as well.
- : Invokes the invoke methods in the service.
Environment variables:
- CORE_D_TITLE: The process title to use. Optional.CORE_D_DOTFILE
- : The name of dotfile to use, e.g. .core_d.CORE_D_SERVICE
- : The resolved path to the service implementation. Userequire.resolve('./relative-path')
to receive the resolved path.
Your service must implement a function with the signature invoke(cwd, args,
text, callback). The passed arguments are:
- cwd: The current working directory.args
- : The first argument passed to core_d.invoke.text
- : The second argument passed to core_d.invoke.callback
- : A callback function with the signature (err, response).
The service can optionally implement a getStatus() function to returncore_d.status()
additional status information when calling .
If you're really into performance and want the lowest possible latency, talk to
the core_d server with netcat. This will also eliminate the node.js startup
time on the client side.
`bashcat ~/.core_d | cut -d" " -f1
❯ PORT=cat ~/.core_d | cut -d" " -f2
❯ TOKEN=`
❯ echo "$TOKEN $PWD file.js" | nc localhost $PORT
Or if you want to work with stdin:
`bash`
❯ echo "$TOKEN $PWD --stdin" | cat - file.js | nc localhost $PORT
- 6.0.0: node 12, 14, 16, 18 and 205.0.0
- : node 12, 14 and 164.0.0
- : node 12, 14 and 163.0.0
- : node 10, 12 and 142.0.0
- : node 10, 12 and 141.0.0`: node 6, 8 and 10
-
MIT
[SemVer]: https://img.shields.io/:semver-%E2%9C%93-brightgreen.svg
[License]: https://img.shields.io/npm/l/core_d.svg
[eslint_d]: https://github.com/mantoni/eslint_d.js