在Node中使用CommonJS模块时,可以使用require.main === module
从命令行检测脚本是否正在运行。
在Node中使用ES模块(带有--experimental-modules
标志)时,从命令行检测脚本是否正在运行的等效方法是什么?
答案 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