Node.js 如何判断入口文件:从 require.main 到 ES Module 实现

目标:判断当前文件是否被直接执行(而不是被 import)


一、CommonJS(对照)

js 复制代码
if (require.main === module) {
  main();
}

二、ES Module 写法(核心)

js 复制代码
import { fileURLToPath } from 'url';

if (process.argv[1] === fileURLToPath(import.meta.url)) {
  main();
}

三、关键点(只记这 3 个)

  • import.meta.url → 当前文件(URL)
  • fileURLToPath() → 转为本地路径
  • process.argv[1] → 启动入口文件路径

👉 判断本质:

入口路径 === 当前文件路径

四、推荐封装

js 复制代码
import { fileURLToPath } from 'url';

export const isMain = (meta) => process.argv[1] === fileURLToPath(meta.url);

// 使用:
if (isMain(import.meta)) {
  main();
}

五、关键技术点拆解(用于深入理解)

1️⃣ import.meta.url

返回当前模块的 URL,例如:

file:///Users/demo/index.js

2️⃣ fileURLToPath

file:// URL 转换为本地路径:

/Users/demo/index.js

3️⃣ process.argv[1]

Node 启动时的入口文件路径:

bash 复制代码
node index.js

# 得到:/Users/demo/index.js
相关推荐
子兮曰1 天前
jev-ultrafast 深度解析:7 秒订机票的浏览器 Agent 是如何炼成的
前端·后端·agent
子兮曰1 天前
Jev 爆发一周:7 秒 Agent 背后的 System One 生态与三场争议
前端·后端·ai编程
前端小万1 天前
写公众号赚了 3000 块后,我做了一款叫 "一键成稿" 的软件
前端·微信小程序
爱勇宝1 天前
ZCode 开源 24 小时:一份没有历史的账本,回答不了"有没有偷代码"
前端·后端·chatglm (智谱)
三十而立洋1 天前
Cookie 详解:从产生到安全,一次讲透
前端·javascript
卡布鲁1 天前
把一个 Vite + Vue3 应用塞进 qiankun (React + Umi3) 主站:十个坑的复盘
前端·javascript·react.js
汉堡大王95271 天前
Jev:不是聊天机器人, 而是一个智能 if 语句
前端·人工智能·后端
梦想很大很大1 天前
从运行事实到回归证据:Workrun 的 Telemetry 与 Evaluation 实践
前端·人工智能·后端
计算机魔术师1 天前
Meta Muse agent 接入 Shopify 的 Shop Pay 实现代理式购物
前端
沙蒿同学1 天前
我用 Go 搭了一条 AI Agent 流水线:从 1 张商品图到一整套淘宝详情页
前端·javascript·后端