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
加载 同步 异步
运行时 项目初始化时 静态解析(编译时)
默认 否(需声明)
相关推荐
我叫汪枫17 小时前
在后台管理系统中,如何递归和选择保留的思路来过滤菜单
开发语言·javascript·node.js·ecmascript
技术钱17 小时前
nodejs使用RustFS容器服务搭建对象存储oss
node.js·egg
大貔貅喝啤酒1 天前
接口测试_Postman(详细版)
javascript·测试工具·node.js·自动化·postman
桜吹雪1 天前
Langchain.js官方文档:构建具备按需加载技能的 SQL 助手
javascript·人工智能·node.js
拾贰_C1 天前
【node.js | Ubuntu | update】如何升级旧的nodejs本版至最新;如何升级npm
ubuntu·npm·node.js
湖边看客1 天前
在 Windows PowerShell 里给 Node.js 设置内存上限
node.js
zhensherlock1 天前
Protocol Launcher 系列:Beorg 高效任务管理的协议支持
前端·javascript·typescript·node.js·自动化·github·js
shao9185162 天前
第3章(2)——使用Gradio JavaScript Client
javascript·node.js·cdn·gradio·job·events·playcode
Rabbit_QL2 天前
npm 不是“前端的包管理器“—它是 Node.js 的
前端·npm·node.js