node.js - ES6 模块如何在 Node 中作为脚本运行?

标签 node.js executable es6-modules shebang

ES6 模块如何在 Node 中作为脚本运行?

当我尝试这个 shebang 时出现错误:

#!/usr/bin/env node --experimental-modules

/usr/bin/env: ‘node --experimental-modules’: No such file or directory

如果我使用这个 shebang 它有语法错误(当然):

#!/usr/bin/env node

SyntaxError: Unexpected token import

我正在使用的解决方法是使用 shell 脚本来调用模块:

#!/usr/bin/env sh

BASEDIR=$( dirname "$0" )
node --experimental-modules $BASEDIR/script.mjs "$@"

是否可以在没有第二个文件的情况下使它工作?

最佳答案

我已经修补了 Ishan Thilina Somasiri在没有 .mjs 扩展名的情况下使用 Node 13 的解决方案:

#!/usr/bin/env bash
":" //# comment; exec /usr/bin/env node --input-type=module - "$@" < "$0"

import { hostname } from 'os';

console.log(hostname());

技巧几乎相同,但使用标准输入,这是唯一的 documented当您没有 package.json.mjs 扩展名时的方式。因此,一个独立的无扩展脚本。

但是__dirname__filename 等全局变量将不可用。

关于node.js - ES6 模块如何在 Node 中作为脚本运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48179714/

相关文章:

mysql - VALID 查询上的 Nodejs MySQL ER_PARSE_ERROR

go - 如何检查链接到我的 Go 代码中的包的大小

python - 如何将 .pyc 文件转换为 .exe 文件

javascript - 一个新对象抛出 "Unexpected token."nodejs

javascript - 使用 Webpack 和 Babel 的 ES6 动态导入

node.js - 在 Express 应用程序中收到错误 "bodyParser.json is not a function"

node.js - 如何在 Node JS 的本地变量中存储 GET 请求的响应

node.js - Node.js如何获取响应时间

带有外部 .jar 的 Java 命令行

node.js - 如何从 vm.SourceTextModule 中获取默认导出?