执行一些代码,然后进入交互节点
在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