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
加载 同步 异步
运行时 项目初始化时 静态解析(编译时)
默认 否(需声明)
相关推荐
008爬虫实战录3 小时前
【码上爬】 题十二:如来神掌 困难, JSVMP加密,使用代理补环境
前端·javascript·node.js
008爬虫实战录8 小时前
【码上爬】 题九:webpack调试 堆栈分析
前端·webpack·node.js
xiaoxue..8 小时前
Node.js 笔试题讲解
后端·面试·node.js
小小前端仔LC9 小时前
Node.js + LangChain +React:搭建个人知识库(四)- 把向量和文件切块存入mysql中
后端·node.js
海上彼尚10 小时前
Nodejs也能写Agent - 7.基础篇 - MCP
前端·javascript·人工智能·node.js
海兰10 小时前
【实用程序】图片处理服务,前端应用 (Vue 3 + Pinia + Vite)后端服务 (Node.js + Express + Sharp)
前端·javascript·vue.js·node.js·pinia
海上彼尚11 小时前
Nodejs也能写Agent - 6.基础篇 - Agent
前端·人工智能·后端·node.js
counterxing20 小时前
Agent 跑起来之后,难的是复用、观测和评测
node.js·agent·ai编程
濮水大叔1 天前
告别 Django Admin!这个 NodeJS 全栈框架让你在 DTO 中直接配置 Table/Form 渲染
前端·typescript·node.js