检测是否通过Node中的命令行运行ES Module

时间:2019-09-07 23:01:46

标签: javascript node.js node-modules es6-modules

在Node中使用CommonJS模块时,可以使用require.main === module从命令行检测脚本是否正在运行。

在Node中使用ES模块(带有--experimental-modules标志)时,从命令行检测脚本是否正在运行的等效方法是什么?

2 个答案:

答案 0 :(得分:2)

目前还没有-(仍在实验中!)。尽管普遍的看法是,无论如何,这种检查都是不好的做法,您应该只为库和可执行文件提供单独的脚本,there is an idea为此目的提供布尔值import.meta.main

答案 1 :(得分:1)

module 全局变量将在 CommonJS 中定义,但在 都在一个 ES 模块中。是的,那里存在不一致之处,即 ES 模块是 没有module变量的东西。

您可以通过查看 typeof v 是否为字符串来检查未定义的变量 (不是价值!)'undefined'

变成:

const inCommonJs = typeof module !== 'undefined';

console.log(`inCommonJs = ${inCommonJs}`);

如果我们将确切的代码放入 .cjs.mjs 文件中,我们会得到正确的答案:

$ node foo.mjs
inCommonJs = false
$ cp foo.mjs foo.cjs
$ node foo.cjs
inCommonJs = true