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
相关推荐
追风筝的人er7 小时前
SpringBoot+Vue3 企业考勤如何处理法定假期?节假日方案、调休补班与工作日判断链路拆解
前端·vue.js·后端
无敌的黑星星7 小时前
Java8 CompletableFuture 实战指南
linux·前端·python
雁鸣零落7 小时前
如何在 Chrome 中查看其他浏览器的书签?书签空间订阅与侧边栏只读切换指南
前端·chrome·edge浏览器
hpoenixf8 小时前
一天上线 + 零返工:我如何给复杂前端需求建立“安全感”
前端
广州华水科技8 小时前
单北斗GNSS变形监测系统在水利工程安全保障中的应用与优势分析
前端
yqcoder9 小时前
CSS 外边距重叠(Margin Collapsing):现象、原理与完美解决方案
前端·css
山楂树の10 小时前
图像标注大坑:img图片 + Canvas 叠加标注,同步放大后标注位置偏移、对不齐?详解修复方案及亚像素处理原理
前端·css·学习·canva可画
本山德彪10 小时前
我做了一个拼豆图纸生成器,把照片秒变图纸
前端
DTrader10 小时前
用TS无法实盘量化? - 实盘均线策略
前端·api
进击的夸父10 小时前
vfojs:Vue 超集架构,外壳React灵魂Vue
前端