Skip to content

Node.js remote code execution via inspect protocol for REPL driven development

Notifications You must be signed in to change notification settings

darky/node-remote-repl

Repository files navigation

node-remote-repl

Execute code remotelly via Node.js inspect protocol like Clojure nREPL. Primary usage for REPL driven development.

Install

npm install -g node-remote-repl

Usage

You can always get help of cli:

node-remote-repl --help

Output:

Usage: node-remote-repl [options] <file>

Options:
  -V, --version        output the version number
  -h, --host <string>  host of inspect protocol (default: "localhost")
  -p, --port <number>  port of inspect protocol (default: 9229)
  -h, --help           display help for command

Ok, it's very easy, create for example repl.js and play with it

node-remote-repl --host some-host --port 9229 repl.js

Also TypeScript supported too

node-remote-repl --host some-host --port 9229 repl.ts

If you want to use fast TypeScript compiler

USE_SWC=1 node-remote-repl --host some-host --port 9229 repl.ts

For TypeScript support should be installed typescript or @swc/core (when USE_SWC=1) in your devDependencies

Some use cases

log to stdout of your remote process

console.log(/* some stuff */);

expose something from remote process

exports.$repl = async () => {
  return 1 + 1;
};

expose some json from remote process

exports.$replJson = async () => {
  return {obj: true};
};

use power of require

const util = require('util');
const module = require('./some-module');

exports.$repl = async () => {
  return util.inspect(module.method(), {colors: true});
};

typescript support out of the box

exports.$repl = async () => {
  const n: number = 1;
  return n;
};

you can replace implementation on remote side

const Module = require('./some-module');
Module.prototype.method = () => {
  // replace implementation on the fly
};

Integration with IDE

Because it simple command line util, you can easy integrate it with your IDE. For example let's do it with Visual Studio Code and Code Runner extension:

  • install Code Runner extension to Visual Studio Code
  • configure Code Runner to run node-remote-repl in repl.js:
{
  "code-runner.executorMapByGlob": {
    "repl.js": "node-remote-repl --host some-host --port 9229"
  }
}
  • profit, now you can fastly run repl via Visual Studio Code
  • I hope, some similar stuff exists on all popular IDE

Related

  • repl-ns - Namespace for REPL driven development for TypeScript/JavaScript, inspired by Clojure namespaces

About

Node.js remote code execution via inspect protocol for REPL driven development

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published