【问题标题】:One line to run node script interactively?一行以交互方式运行节点脚本?
【发布时间】:2016-05-22 12:11:21
【问题描述】:

为什么我不能运行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)

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

【问题讨论】:

  • 这不是有效的 JavaScript 代码,您希望发生什么?你的意思是require('./script.js')
  • 在节点交互模式下有效。 stackoverflow.com/a/15387586/903980
  • 不,它在 REPL 中有效,这与交互模式有很大不同。
  • $ node --interactive, &gt; .load ./script.js 工作正常。

标签: node.js


【解决方案1】:

-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。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-10
    • 1970-01-01
    • 2012-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    相关资源
    最近更新 更多