Start up script for node.js repl

前端 未结 5 623
醉酒成梦
醉酒成梦 2020-12-30 02:01

Is there a way configure node.js\'s repl? I want to require jquery and underscore automatically whenever the repl starts. Is there a file (noderc?) that node.js loads when i

相关标签:
5条回答
  • 2020-12-30 02:30

    Might be a newer feature of Node.js (since this question is four years old), but you can load and save repl history like ipython.

    .break - While inputting a multi-line expression, sometimes you get lost or just don't care about completing it. .break will start over.
    .clear - Resets the context object to an empty object and clears any multi-line expression.
    .exit - Close the I/O stream, which will cause the REPL to exit.
    .help - Show this list of special commands.
    .save - Save the current REPL session to a file
        .save ./file/to/save.js
    .load - Load a file into the current REPL session.
        .load ./file/to/load.js
    

    I can't figure out how to execute this automatically when starting the shell, but .load something is convenient enough for me at the moment.

    0 讨论(0)
  • 2020-12-30 02:31

    I tried this today but .start required an argument. Also I think the useGlobal:true was important. I wound up using:

    var myrepl=require('repl').start({useGlobal:true});
    myrepl.context['myObj']=require('./myObject');
    

    Saving this code in test.js I could do a node test.js then access myObj in REPL.

    0 讨论(0)
  • 2020-12-30 02:34

    I don't know of any such configuration file, but if you want to have modules foo and bar be available in a REPL, you can create a file myrepl.js containing:

    var myrepl = require("repl").start();
    ["foo", "bar"].forEach(function(modName){
        myrepl.context[modName] = require(modName); 
    });
    

    and you when you execute it with node myrepl.js you get a REPL with those modules available.

    Armed with this knowledge you can put #!/path/to/node at the top and make it executable directly, or you could modify your version of the repl.js module (source available at https://github.com/joyent/node/blob/master/lib/repl.js for inspection) or whatever :)

    0 讨论(0)
  • 2020-12-30 02:43

    Keeping things simple here's what I clabbered up.

    repl.js:

    // things i want in repl
    global.reload = require('require-nocache')(module) // so I can reload modules as I edit them
    global.r = require('ramda') // <3 http://ramdajs.com/
    // launch, also capture ref to the repl, in case i want it later
    global.repl = require('repl').start()
    

    I can invoke this with node repl which feels right, and I don't care about globals, because I am just messin' around in the repl.

    0 讨论(0)
  • 2020-12-30 02:56

    Feb 2017 - whilst I agree with the accepted answer, wished to add a little more commentary here.

    Like to setup as follows (from home directory on my Mac)

    .node ├── node_modules │   ├── lodash │   └── ramda ├── package.json └── repl.js

    Then repl.js may look like as follows:

    const repl = require('repl');
    
    let r = repl.start({
      ignoreUndefined: true,
      replMode: repl.REPL_MODE_STRICT
    });
    
    r.context.lodash = require('lodash');
    r.context.R = require('ramda');
    // add your dependencies here as you wish..
    

    And finally, put an alias into your .bashrc or .zshrc file etc (depending on your shell prefs) - something like:

    alias noder='node ~/.node/repl.js'

    Now, to use this configuration, you just have to type noder from the command line. Above, I also specified that I'd always like to be in strict mode, and do not want undefined printed to the console for declarations etc.

    For up-to-date information on repl and in particular repl.start options see here

    0 讨论(0)
提交回复
热议问题