A Usable Node.js REPL for Emacs
Being used to the excellent REPL in Clojure(Script), I was surprised to find out that Node.js REPL is somewhat weak and that its support in Emacs is not actively maintained. I anyway managed to get a usable REPL with these three components:
Regarding #3: The problem with the Node.js REPL is that valid JS code does not always behave correctly in the REPL. This is because: 1)
into
when the code is being sent to the REPL
- The Emacs nodejs-repl package (nearly 2 years old)
- J. David Smith's nodejs-repl-eval.el to be able to send code to the REPL (binding
nodejs-repl-eval-dwim
toC-x C-e
so that I can execute the current sexp/region) - My own extension of nodejs-repl-eval.el that takes care of escaping JS constructs that the REPL interprets in a special way
Regarding #3: The problem with the Node.js REPL is that valid JS code does not always behave correctly in the REPL. This is because: 1)
_
is a special variable (the last result) while in code it is often used for the underscore/lodash library; 2) The REPL also interprets lines somewhat separately and tries to execute <dot><name>
as a REPL command, breaking chained calls that start on a new line. My solution uses some RegExp magic to turn
var _ = require("lodash"); // #1a conflicting use of _
_.chain([1,2]) // #1b conflicting use of _
.first() // #2 interpreted as non-existing REPL command '.first'
.value();
into
var __ = require("lodash"); // #1a Notice the doubled _
__.chain([1,2]). // #1b Notice the doubled _
first(). // #2 Notice the dot has moved to the previous line
value();
when the code is being sent to the REPL