Node.js 模块系统

Node.js 模块系统

1. import.meta.url 是什么

import.meta.url 是 ES 模块的语法,表示当前文件的 URL 路径。

javascript 复制代码
import { fileURLToPath } from 'node:url';
const __filename = fileURLToPath(import.meta.url);  // 把 import.meta.url(文件 URL)转换成文件路径

__filename 在 CommonJS 中是全局存在的,但在 ES 模块中需要通过 import.meta.url 转换得到。

2. Node.js 默认模块规范

Node.js 默认使用 CommonJS 规范 (require() / module.exports)。

ES 模块(import / export 语法)需要显式声明才能使用。

如何启用 ES 模块

有三种方式:

  1. package.json 声明 "type": "module" --- 所有 .js 文件被视为 ES 模块
  2. 文件使用 .mjs 扩展名 --- 强制作为 ES 模块
  3. 文件使用 .cjs 扩展名 --- 强制作为 CommonJS 模块

示例

json 复制代码
// package.json
{
  "name": "my-project",
  "type": "module"
}

未声明时,Node.js 会把 .js 文件当作 CommonJS,产生警告:

复制代码
[MODULE_TYPELESS_PACKAGE_JSON] Warning: Module type of file://... is not specified

3. CommonJS vs ES 模块

特性 CommonJS ES 模块
语法 require() / module.exports import / export
加载 同步 异步
运行时 项目初始化时 静态解析(编译时)
默认 是 否(需声明)
相关推荐
梅孔立7 小时前
Codex 完整教程(Node.js安装 + npm安装Codex + DeepSeek配置 + 快捷键 + 设置)
前端·npm·node.js
晚风醉蝶7 小时前
webpack 模块提取
前端·webpack·node.js·ast·逆向分析
YIAN1 天前
从 SSE 流式到结构化输出:LangChain 三大 OutputParser 与 ToolCall 方案全实战
前端·langchain·node.js
濮水大叔2 天前
Cabloy全栈框架的两个SSR入口:Vona集成式SSR vs Zova独立式SSR
typescript·node.js·全栈
怕浪猫2 天前
DeepSeek Harness 系列图解
面试·前端框架·node.js
百万蹄蹄向前冲2 天前
双端同步!云服务器装最新Node.js v26.10全过程追踪
服务器·人工智能·node.js
前端snow2 天前
ai agent--- 后端概念补充:Docker Compose、ElasticSearch、IK、BM25等
node.js
EdgeEcho2 天前
Node 里那个"只解第一帧"的坑,我用 172 行代码绕过去了
node.js
光影少年2 天前
Redis + Node 如何支撑百万级并发
redis·后端·node.js
半个落月2 天前
从“等待整段答案”到边生成边展示:大模型流式输出与 SSE 实战(上)
langchain·node.js