You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js中ES Modules环境下如何实现主函数执行控制?

Node.js ES模块中判断模块是否被直接运行的实现方式

在CommonJS模块规范下,我们可以通过require.main === module判断模块是被直接运行还是作为依赖导入,示例代码如下:

function main(){
    console.log("This is the main method");
}

// 判断模块是否被直接运行
if (require.main === module)
    main()

当在package.json中设置type:"module"启用ES模块后,require相关API不再可用,此时可以通过import.meta.url结合路径转换工具实现相同逻辑,标准实现代码如下:

import { fileURLToPath } from 'url';

const __filename = fileURLToPath(import.meta.url);

function main() {
    console.log("This is the main method in ES module");
}

// 判断模块是否被直接运行
if (__filename === process.argv[1]) {
    main();
}

核心逻辑说明

  • import.meta.url:ES模块专属属性,返回当前模块的文件URL(格式类似file:///path/to/your/module.js)。
  • fileURLToPath:将模块的URL转换为本地文件系统的绝对路径,作用等同于CommonJS中的__filename。
  • process.argv[1]:Node.js进程启动时传入的第一个脚本文件路径,即直接运行的入口模块路径。

通过对比转换后的模块路径与process.argv[1],即可判断当前模块是否为用户直接运行的入口文件,进而决定是否执行主函数。

内容的提问来源于stack exchange,提问作者Andrew S

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 12:32:38