一行以交互方式运行节点脚本?

时间:2016-05-22 12:11:22

标签: node.js

为什么我无法运行node -e ".load ./script.js"

$ node -e '.load ./script.js'
[eval]:1
.load
^

SyntaxError: Unexpected token .
    at Object.exports.runInThisContext (vm.js:53:16)
    at Object.<anonymous> ([eval]-wrapper:6:22)
    at Module._compile (module.js:410:26)
    at node.js:578:27
    at nextTickCallbackWith0Args (node.js:419:9)
    at process._tickCallback (node.js:348:13)

我尝试使用.转义\,但这也不起作用。

1 个答案:

答案 0 :(得分:0)

-e标志告诉节点在提供的字符串上运行eval。这意味着它将作为纯JavaScript运行。 .load是一个REPL命令,表示它不是javascript。 -e也不会运行REPL,因此不会执行您想要的操作。

如果您只想从命令行运行脚本,则只需执行node path/to/script.js

要运行一个加载脚本的线性脚本,可以执行node -e "require('path/to/script.js')",但是这只会加载脚本,然后退出。节点将返回,并且什么也不会发生。使用预加载的数据运行REPL可能有几种方法,但是我喜欢这样做:

node -e "const repl = require('repl'); repl.start().context.script = require('path/to/script.js')"

我实际上是在批处理脚本中使用该脚本(因为我正在运行Windows),该脚本用于测试库。我只需要传递我想包含的所有脚本,它就会为我加载它们而启动REPL。