有没有一种方法可以在放入node.js的交互模式之前执行一些代码(在文件或字符串中,没关系)?
例如,如果我创建一个__preamble__.js包含以下内容的脚本:
console.log("preamble executed! poor guy!");
和用户类型,node __preamble__.js他们得到以下输出:
preamble executed! poor guy!
> [interactive mode]
Answers:
真的是老问题了,但是...
我相信,我一直在寻找类似的东西,并发现了这一点。您可以打开REPL(node在终端上键入),然后加载文件。像这样:.load ./script.js。按Enter,将执行文件内容。现在,您在脚本中创建的所有内容(对象,变量,函数)都将可用。
例如:
// 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);
这会有些奇怪,因为“随着时间的流逝...”每五秒钟(或大约五秒钟)不断出现。但这会起作用!
someObject.doStuff()\n.doMoreStuff()。它吐出来了Invalid REPL keyword-似乎正在试图将其解释为某种命令。
您可以repl很轻松地在Node软件中启动新的:
var repl = require("repl");
var r = repl.start("node> ");
r.context.pause = pauseHTTP;
r.context.resume = resumeHTTP;
从REPL内你就可以打电话pause()或resume()和执行功能pauseHTTP()和resumeHTTP()直接。只需将您要公开的内容分配给REPL的context成员即可。
node将启动交互模式。我不确定如何回答其他问题-您可以添加一个吗?谢谢。
这可以通过当前版本的NodeJS(5.9.1)实现:
$ node -i -e "console.log('A message')"
该-e标志评估字符串,并且-i标志开始交互模式。
您可以在参考的请求请求中阅读更多内容
node+。load ./script.js答案更好。
node -i -e "$(< ./script.js)"文件。
node -i -e "require('./script.js')"也用于文件。
node -r允许您在REPL启动时需要一个模块。NODE_PATH设置模块搜索路径。因此,您可以在命令行上运行以下内容:
NODE_PATH=. node -r myscript.js
这应该使您处于加载脚本的REPL中。
我最近启动了一个项目,为Node和相关语言(如CoffeeScript)创建高级交互式外壳。功能之一是在启动时在解释器的上下文中加载文件或字符串,该文件或字符串考虑了所加载的语言。
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功能。
编辑:忽略此。@ jaywalking101的答案要好得多。改为这样做。
如果您是从Bash shell(Linux,OS X,Cygwin)内部运行,则
cat __preamble__.js - | node -i
将工作。这也从评估序言.js的每一行中散发出很多噪音,但是后记将落在所需上下文中的交互式外壳中。
(“-”至“ cat”仅指定“使用标准输入”。)
-。当然可以,但是您无法在REPL中完成制表符的功能。
javascript并传递给带有-i选项的节点将阻止使用历史记录命令(箭头键),而这些命令将使用$node; and the .load myfile.js`起作用。当然,对于后者,您松开了一种将其作为命令的方法。
与@slacktracer类似的答案,但是如果您可以global在脚本中很好地使用require它,则可以简单地使用它,而不是使用和学习.load。
范例lib.js:
global.x = 123;
node会话示例:
$ node
> require('./lib')
{}
> x
123
作为一个很好的副作用,您甚至不必var x = require('x'); 0跳舞,因为它module.exports仍然是一个空对象,因此require结果将不会用模块的内容填满屏幕。
创建Vorpal.js就是为了做到这一点。它提供了一个API,用于在您的应用程序上下文中构建交互式CLI。
它包括插件,其中之一是Vorpal-REPL。这使您可以键入repl,并将您带入应用程序上下文中的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。
vorpal?
require在启动时仅使用vanilla js要求它们,或者发出需要它们的Vorpal命令。查看Vorpal API以获得更多详细信息。
本机没有办法。您可以输入节点交互式外壳程序node或运行您拥有的脚本node myScrpt.js。@sarnold是正确的,因为如果您想为自己的应用程序使用它,则需要自己制作,使用repl工具包对此类事情很有帮助。
nit-tool允许您将节点模块加载到repl交互中,并可以出于开发目的访问内部模块环境(联接上下文)
npm install nit-tool -g
var foo = ""\n\t, bar = "";不起作用),并且不会提供某些全局变量(例如__dirname,您可以在repl会话开始时手动提供)。否则,这太棒了。很强大!