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
加载 同步 异步
运行时 项目初始化时 静态解析(编译时)
默认 否(需声明)
相关推荐
To_OC1 小时前
对接大模型流式接口,我被一个 ReadableStream 卡了半小时
前端·node.js·llm
特立独行的猫a14 小时前
鸿蒙PC Node.js三方库移植的AI移植框架与社区贡献完整流程
华为·node.js·harmonyos·三方库移植·鸿蒙pc
AI 编程助手GPT14 小时前
Cursor Router 上线后,我用 Node.js 实现了一个可解释的模型路由器
node.js
半个落月18 小时前
用 Node.js 搭建 EPUB 问答助手:从文本切片、向量检索到 RAG
人工智能·node.js
meilindehuzi_a20 小时前
Node.js + LangChain.js + Milvus 实战:从 EPUB 入库到《天龙八部》RAG 问答系统
javascript·langchain·node.js
行走的陀螺仪1 天前
从 nvm 到 fnm:更快、更省心的 Node.js 版本管理器迁移指南
rust·node.js·nvm·fnm
安冬的码畜日常1 天前
【工欲善其事】深入理解 Node.js 带并发上限的异步任务批量执行逻辑
javascript·设计模式·node.js·ai编程·异步编程·并发执行
ToolReel2 天前
Node.js 查询 Google Analytics 4 数据:GA Lite API 接入实战
node.js
寒水馨2 天前
Linux下载、安装 Bun v1.3.14(附安装包bun-linux-x64.zip)
linux·javascript·typescript·node.js·bun·运行时·包管理器
兮动人2 天前
Linux 安装 Claude Code 实战:Node.js、npm、GLM 配置一次跑通
linux·npm·node.js·cc·claude code