23

有没有办法配置node.js的repl?我想在 repl 启动时自动要求 jquery 和下划线。是否有 node.js 在启动 repl 时加载的文件(noderc?)?

Python中的等价物是编辑~/.ipython/ipy_user_conf.py

import_mod('sys os datetime re itertools functools')
4

5 回答 5

23

我不知道有任何这样的配置文件,但如果你想拥有模块foobar在 REPL 中可用,你可以创建一个包含以下内容的文件myrepl.js

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

当你执行它时,node myrepl.js你会得到一个包含这些模块的 REPL。

有了这些知识,您可以将#!/path/to/node其放在顶部并使其直接可执行,或者您可以修改您的 repl.js 模块版本(源代码位于https://github.com/joyent/node/blob/master/lib/ repl.js用于检查)或其他任何东西:)

于 2011-07-21T00:28:37.957 回答
5

我今天尝试了这个,但.start需要一个论点。我也认为这useGlobal:true很重要。我最终使用:

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

将此代码保存在test.js我可以在 REPL 中进行node test.jsthen 访问。myObj

于 2012-10-04T21:26:08.313 回答
5

2017 年2 月- 虽然我同意接受的答案,但希望在这里添加更多评论。

喜欢如下设置(从我的 Mac 上的主目录)

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

那么 repl.js 可能如下所示:

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..

最后,将别名放入您的.bashrc.zshrc文件等中(取决于您的 shell 首选项) - 例如:

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

现在,要使用此配置,您只需noder从命令行键入。上面,我还指定我总是喜欢在strict mode,并且不想undefined打印到控制台进行声明等。

有关repl特定repl.start选项的最新信息,请参见此处

于 2017-02-20T12:32:45.103 回答
5

可能是 Node.js 的一个较新功能(因为这个问题已有四年历史了),但您可以像 ipython 一样加载和保存 repl 历史记录。

.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

我无法弄清楚如何在启动 shell 时自动执行此操作,但.load something目前对我来说已经足够方便了。

于 2015-11-23T21:24:13.307 回答
1

保持简单,这就是我拼凑起来的。

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()

我可以用node repl感觉正确的方式调用它,而且我不关心全局变量,因为我只是在 repl 中乱七八糟。

于 2016-12-06T00:36:55.983 回答