【发布时间】:2019-08-29 07:04:59
【问题描述】:
ES5 代码可以在终端中使用 Bash heredoc 轻松运行:
node <<HEREDOC
var fs = require("fs");
...
HEREDOC
但 ES6 代码无法运行,即使使用正确的 --experimental-modules 标志:
node --experimental-modules <<HEREDOC
import fs from "fs";
...
HEREDOC
显示的错误是:
(node:4130) ExperimentalWarning: The ESM module loader is experimental.
[stdin]:1
import fs from "fs";
^^
SyntaxError: Unexpected identifier
at new Script (vm.js:83:7)
at createScript (vm.js:267:10)
at Proxy.runInThisContext (vm.js:319:10)
at Object.<anonymous> ([stdin]-wrapper:6:22)
at Module._compile (internal/modules/cjs/loader.js:722:30)
at evalScript (internal/bootstrap/node.js:670:27)
at ReadStream.<anonymous> (internal/bootstrap/node.js:340:15)
at ReadStream.emit (events.js:187:15)
at endReadableNT (_stream_readable.js:1098:12)
at process.internalTickCallback (internal/process/next_tick.js:72:19)
它确实显示此信息“ExperimentalWarning:ESM 模块加载器是实验性的。”这意味着 Node.js 使用 ES6 模块功能可以正常运行,但是,import 关键字不起作用。
如何使用 Bash heredoc 在终端中内联运行 ES6 代码? 我知道我可以将代码写入文件以正常加载为 ES6 模块,但这是一个简短的临时代码,应该在 heredoc 中更好。
【问题讨论】:
-
--experimental-modules 不支持标准输入模块(目前),它应该在 Node 12 中支持。如果你真的需要 ES 模块,你可以尝试使用npmjs.com/package/esm。
-
@Jamesernator 它只允许我导入内置模块,“npm i moment”不起作用,“npm i -g moment”也不起作用
-
是的,只有内置模块在标准输入中工作。 REPL 中存在相同问题的未解决问题,可能是相同的原因:github.com/nodejs/node/issues/19570
标签: javascript node.js bash ecmascript-6 heredoc