使用Bash heredoc在终端中可以轻松运行ES5代码:node <<HEREDOC var fs = require("fs"); ...HEREDOC但是,即使使用正确的--experimental-modules标志,ES6代码也不会运行:node --experimental-modules <<HEREDOC import fs from "fs"; ...HEREDOC显示的错误是:(node:4130) ExperimentalWarning: The ESM module loader is experimental.[stdin]:1import 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中更好。
2 回答
子衿沉夜
TA贡献1828条经验 获得超3个赞
这是一个很好的问题,它教给我很多东西!感谢您的询问。这是我学到的:
首先,
针对节点的Bash Heredoc就像简单地执行节点,然后键入在Heredoc标记中键入的内容一样
IE
node --experimental-modules <<HEREDOC
import fs from "fs";
...
HEREDOC
相当于
node --experimental-modules
> import fs from "fs";
然后执行这样的节点,从节点打开REPL
其次,import语法:
import fs from "fs"
有没有fs在"fs"。现在这对您来说不是问题,但是如果导入成功,则不会在"fs"模块中找到。相反,正确的语法将是,例如:
import { readFile } from "fs";
但是,这产生了:
SyntaxError: Unexpected token {
最后,问题是整个功能确实是实验性的。
添加回答
举报
0/150
提交
取消