hug*_*omg 121 javascript node.js read-eval-print-loop
我有一个脚本foo.js,其中包含我想在REPL中使用的一些函数.
有没有办法让节点执行我的脚本,然后跳转到一个包含所有声明的全局变量的REPL,就像我可以使用python -i foo.py或ghci foo.hs?
vos*_*d01 164
仍然没有任何内置功能可以提供您描述的确切功能.但是,使用require它在REPL中使用.load命令的替代方法,如:
.load foo.js
Run Code Online (Sandbox Code Playgroud)
它逐行加载文件,就像您在REPL中键入它一样.与require此不同的是,使用您加载的命令污染REPL历史记录.但是,它具有可重复性的优点,因为它不像缓存那样require.
哪个更好,取决于您的使用案例.
编辑:它的适用性有限,因为它不能在严格模式下工作,但三年后我了解到如果您的脚本没有'use strict',您可以使用eval加载脚本而不会污染REPL历史记录:
var fs = require('fs');
eval(fs.readFileSync('foo.js').toString())
Run Code Online (Sandbox Code Playgroud)
Geo*_*ili 27
我总是使用这个命令
node -i -e "$(< yourScript.js)"
Run Code Online (Sandbox Code Playgroud)
与没有任何软件包的Python完全一样.
我创建了Vorpal.js,它通过将您的节点添加到交互式CLI来处理此问题.它支持REPL扩展,在您运行的应用程序的上下文中将其转换为REPL.
var vorpal = require('vorpal')();
var repl = require('vorpal-repl');
vorpal
.delimiter('myapp>')
.use(repl)
.show()
.parse(process.argv);
Run Code Online (Sandbox Code Playgroud)
然后你可以运行应用程序,它将进入REPL.
$ node myapp.js repl
myapp> repl:
Run Code Online (Sandbox Code Playgroud)
另一种方法是将这些功能定义为全局功能。
global.helloWorld = function() { console.log("Hello World"); }
Run Code Online (Sandbox Code Playgroud)
然后以以下方式将文件预加载到REPL中:
node -r ./file.js
Run Code Online (Sandbox Code Playgroud)
然后helloWorld可以在REPL中直接访问该功能。
我创建了replpad因为我厌倦了重复重新加载脚本.
只需安装它: npm install -g replpad
然后通过运行使用它: replpad
如果您希望它在当前和所有子目录中观察所有文件,并在更改时将它们传递到repl: replpad .
查看网站上的视频,以更好地了解它的工作原理,并了解其中一些其他不错的功能:
dox()添加到每个核心功能的函数访问repl中的核心模块文档,即fs.readdir.dox()dox()添加到通过npm安装的每个模块的函数访问repl中的用户模块自述文件,即marked.dox()src添加到每个函数的属性,即express.logger.src.talk命令).append命令将在repl中输入的代码追加回文件这是乔治回答的 bash 函数版本 :
noderepl() {
FILE_CONTENTS="$(< $1 )"
node -i -e "$FILE_CONTENTS"
}
Run Code Online (Sandbox Code Playgroud)
如果你把它放在你的~/.bash_profile你可以像别名一样使用它,即:
noderepl foo.js
Run Code Online (Sandbox Code Playgroud)
为什么不将文件加载到交互式节点repl中?
node -h
-e, --eval script evaluate script
-i, --interactive always enter the REPL even if stdin
node -e 'var client = require("./build/main/index.js"); console.log("Use `client` in repl")' -i
Run Code Online (Sandbox Code Playgroud)
然后您可以添加到package.json脚本
"repl": "node -e 'var client = require(\"./build/main/index.js\"); console.log(\"Use `client` in repl\")' -i",
Run Code Online (Sandbox Code Playgroud)
使用节点v8.1.2进行了测试
| 归档时间: |
|
| 查看次数: |
39874 次 |
| 最近记录: |