为什么我不能使用.load来启动node.js中的交互式脚本?

时间:2016-11-28 15:20:19

标签: javascript node.js bash

在node.js中,您可以传递参数-i以获取交互式控制台,然后传递-e来评估javascript语句。

我试过跑:

$ node -i -e '.load ./someScript.js'
.load someScript.js;
^

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)

我得到一个错误,但如果我尝试从交互式节点提示符运行相同的东西,它加载就好了;即。

> .load ./someScript.js

我还需要做些什么才能让这项工作成功吗?

2 个答案:

答案 0 :(得分:1)

  

为什么我不能评估.load来启动node.js中的交互式脚本?

因为-e用于评估 JavaScript 代码。交互式REPL的命令不是JavaScript,它们是REPL交互式命令。

This question询问如何在运行脚本之后进行交互,这不会回答“为什么”部分(这就是我发布上述内容的原因),但它的答案可能会给你一些选择-implied“......而我该怎么做?”部分。 : - )

答案 1 :(得分:1)

您可以使用自定义脚本从module

启动REPL

类似的东西:

const repl = require('repl'),
      path = require('path'),
      location = process.argv[2],
      base = path.basename(location),
      clean = path.split('.')[0];

const r = repl.start('> ');
Object.defineProperty(r.context, clean, {
  configurable: false,
  enumerable: true,
  value: require(location)
});

因此,现在您可以执行node loadModule /path/to/load.js,该模块将根据路径的基础而可用(/path/to/load.js将在load下提供)