执行一些代码,然后进入交互节点

在node.js中进入交互模式之前,有没有办法执行一些代码(在文件中或从string中,并不重要)?

例如,如果我创build了一个脚本__preamble__.js其中包含:

 console.log("preamble executed! poor guy!"); 

和一个用户typesnode __preamble__.js他们得到这个输出:

 preamble executed! poor guy! > [interactive mode] 

真的老问题,但…

我相信,我正在寻找类似的东西,并且发现了这一点。 您可以打开REPL(在terminal上键入node ),然后加载文件。 像这样: .load ./script.js 。 按回车键,文件内容将被执行。 现在,脚本中创build的所有对象(对象,variables,函数)都将可用。

例如:

 // script.js var y = { name: 'obj', status: true }; var x = setInterval(function () { console.log('As time goes by...'); }, 5000); 

在REPL上:

 //REPL .load ./script.js 

现在你在REPL上键入,并与“活代码”交互。 你可以console.log(y)clearInterval(x) ;

这将有点奇怪,因为“随着时间的stream逝…”每五秒钟左右不断出现。 但它会工作!

您可以很容易地在Node软件中启动一个新的repl

 var repl = require("repl"); var r = repl.start("node> "); r.context.pause = pauseHTTP; r.context.resume = resumeHTTP; 

在REPL中,您可以调用pause()resume()函数直接执行函数pauseHTTP()resumeHTTP() 。 只要分配任何你想暴露给REPL的context成员。

这可以通过当前版本的NodeJS ( 5.9.1 )来实现:

 $ node -i -e "console.log('A message')" 

-e标志评估string, -i标志开始交互模式。

您可以在引用的拉取请求中阅读更多信息

我最近开始了一个项目,为Node和相关语言(如CoffeeScript)创build高级交互式shell。 其中一个function是在启动时在解释器的上下文中加载一个文件或string,该文件或string考虑到加载的语言。

http://danielgtaylor.github.com/nesh/

例子:

 # Load a string (Javascript) nesh -e 'var hello = function (name) { return "Hello, " + name; };' # Load a string (CoffeeScript) nesh -c -e 'hello = (name) -> "Hello, #{name}"' # Load a file (Javascript) nesh -e hello.js # Load a file (CoffeeScript) nesh -c -e hello.coffee 

然后在解释器中,您可以访问hello函数。

node -r允许您在REPL启动时需要一个模块。 NODE_PATH设置模块searchpath。 所以你可以在命令行上运行这样的东西:

NODE_PATH=. node -r myscript.js

这应该把你join你的脚本的REPL。

编辑:忽略这一点。 @ jaywalking101的答案好多了。 这样做。

如果你是从Bash shell(Linux,OS X,Cygwin)运行,那么

 cat __preamble__.js - | node -i 

将工作。 这也会从评估序言 .js的每行内容中产生大量的噪音,但是在您想要的上下文中您可以在交互式shell中login。

(“ – ”到“猫”只是指定“使用标准input”)。

类似的答案@slacktracer,但如果你在脚本中使用global ,你可以简单地require它,而不是(学习和)使用。

例子lib.js

 global.x = 123; 

示例node会话:

 $ node > require('./lib') {} > x 123 

作为一个很好的副作用,你甚至不需要做var x = require('x'); 0 var x = require('x'); 0舞蹈,作为module.exports仍然是一个空的对象,因此require结果将不填满您的屏幕与模块的内容。

Vorpal.js是为了做到这一点。 它提供了一个用于在应用程序上下文中构build交互式CLI的API。

它包括插件,其中一个是Vorpal-REPL 。 这可以让你inputrepl ,这会让你在应用程序的上下文中进入REPL。

例子来实现:

 var vorpal = require('vorpal')(); var repl = require('vorpal-repl'); vorpal.use(repl).show(); // Now you do your custom code... // If you want to automatically jump // into REPl mode, just do this: vorpal.exec('repl'); 

就这样!

免责声明:我写了Vorpal。

这本来是没有办法的。 您可以进入节点交互式shell node也可以运行具有node myScrpt.js的脚本。 @sarnold是正确的,因为如果你想为你的应用程序,你需要自己做,使用repl工具包是有用的这种事情

nit工具允许您将节点模块加载到repl interactive中,并且可以访问内部模块环境(join context)用于开发目的

 npm install nit-tool -g