仅在直接执行模块时运行ES6代码

时间:2017-05-20 00:00:51

标签: javascript ecmascript-6 es6-modules

我一直在使用ES6模块,我正在寻找一种方法来包含仅在 运行的代码(如果文件是直接执行的(而不是由另一个文件导入)。在Python之类的早期本机模块支持的语言中,这很简单:只需将代码包装在if __name__ == '__main__'块中,代码将仅在文件直接执行时运行。这对于将基本测试代码附加到库等问题非常有用。我很好奇是否有办法用ES6做到这一点。

理想情况下,我希望有这样的事情:

档案a.js

export const pi = 3.1415
/* Some magical code here */
console.log("This only prints if you run a.js directly.")

档案b.js

import {pi} from 'a';
console.log(pi);

这样可以执行文件并获得以下输出:

> somejsengine ./a.js
"This only prints if you run a.js directly."
> somejsengine ./b.js
3.1415

我也很好奇Node的CommonJS模块是否存在这样的解决方案(如Node.js still doesn't support ES6 style modules

1 个答案:

答案 0 :(得分:0)

实际上Node中有可能出现这种情况: Accessing the main module

如果模块直接使用require.main === module运行,您可以检查。

if (require.main === module) {
    console.log("This only prints if you run a.js directly.")
}