加载 ecmascript 模块(.mjs 文件)作为 nodejs cli 的主要入口

load ecmascript module (.mjs file) as main entry of nodejs cli

有没有办法将 ecmascript 模块文件用作使用 package.json bin 条目导出的 cli 的主要条目文件?

我想我需要以某种方式提供 --experimental-modules 标志,但是如果不将 mjs 文件包装到 js 文件然后通过 [= 调用 mjs 文件,我想不出一种方法来做到这一点13=]

#!/usr/bin/env node
// pseudocode
child_process.spawn(
  'node', 
  ['--experimental-modules', 'bin.mjs'], 
  { stdio: 'inherit' }
)

考虑到调用 child_process.spawn 的开销,我希望能够替换我的库中的那些包装器。

编辑: 请注意,我的 cli 必须可以使用 npm i -g 安装为可执行文件,据我所知,这使得无法将任何命令行标志传递给节点进程(参见 我将无法使用)

编辑2: 我想我也应该在这里给相关的库留下一个 link @magic/cli,这是我目前的方法(我包括一个 bin.js 文件,child_process.spawn 是一个 mjs 文件)

您可以安装 esm 模块,然后在 运行 编译代码时需要它,即代替 --experimental-modules,您可以使用 -r esm。然后你会 运行 你的代码为 node -r esm bin.mjs.

节点13默认启用--experimental-modules,所以#!/usr/bin/env node就够了。但是,仍然会发出警告。

(node:23260) ExperimentalWarning: The ESM module loader is experimental.