普通视图

发现新文章,点击刷新页面。
今天 — 2026年4月11日首页

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

2026年4月11日 14:14

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


一、CommonJS(对照)

if (require.main === module) {
  main();
}

二、ES Module 写法(核心)

import { fileURLToPath } from 'url';

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

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

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

👉 判断本质:
入口路径 === 当前文件路径

四、推荐封装

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 启动时的入口文件路径:

node index.js

# 得到:/Users/demo/index.js
❌
❌