在node.js中进入交互模式之前,有没有办法执行某些代码(在文件中或从字符串中,并不重要)?
例如,如果我创建一个包含以下内容的脚本__preamble__.js
console.log("preamble executed! poor guy!");
并且用户输入node __preamble__.js
他们得到此输出:
preamble executed! poor guy!
> [interactive mode]
答案 0 :(得分:90)
真的很老问题但是......
我相信,我正在寻找类似的东西,并发现了这一点。 您可以打开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)
;
这将有点奇怪,因为“随着时间的推移......”每五秒钟(或左右)继续出现。 但它会奏效!
答案 1 :(得分:24)
您可以非常轻松地在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
成员。
答案 2 :(得分:19)
这可以通过current version of NodeJS(5.9.1
):
$ node -i -e "console.log('A message')"
-e
标志评估字符串,-i
标志开始交互模式。
您可以在引用的pull request
中阅读更多内容答案 3 :(得分:7)
我最近开始了一个项目,为Node和相关语言(如CoffeeScript)创建高级交互式shell。其中一个功能是在启动时在解释器的上下文中加载文件或字符串,其中考虑了加载的语言。
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
函数。
答案 4 :(得分:7)
--ignore-ssl-errors=true --ssl-protocol=any --debug=true
允许您在REPL启动时需要一个模块。 node -r
设置模块搜索路径。所以你可以在命令行上运行这样的东西:
NODE_PATH
这应该会在加载脚本的情况下将您置于REPL中。
答案 5 :(得分:2)
编辑:忽略这一点。 @jaywalking101的答案要好得多。那样做。
如果你是从Bash shell(Linux,OS X,Cygwin)内部运行,那么
cat __preamble__.js - | node -i
会奏效。这也会通过评估前导 .js的每一行来产生大量噪音,但是在您想要的上下文中,您将进入交互式shell。
(' - '到'cat'只是指定“使用标准输入”。)
答案 6 :(得分:2)
@slacktracer的类似答案,但如果你在脚本中使用global
就可以了,你只需require
而不是(学习和)使用.load
。
示例lib.js
:
global.x = 123;
示例node
会话:
$ node
> require('./lib')
{}
> x
123
作为一个很好的副作用,您甚至不必进行var x = require('x'); 0
舞蹈,因为module.exports
仍然是一个空对象,因此require
结果将无法填充使用模块的内容启动屏幕。
答案 7 :(得分:1)
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。
答案 8 :(得分:0)
本地没有办法做到这一点。您可以输入节点交互式shell node
或运行您拥有node myScrpt.js
的脚本。 @sarnold是对的,因为如果你想要你的应用程序,你需要自己做,并使用repl工具包对这种事情是有帮助的
答案 9 :(得分:0)
nit-tool 允许您将节点模块加载到repl交互式中,并且可以访问内部模块环境(连接上下文)以进行开发目的
npm install nit-tool -g