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
加载 同步 异步
运行时 项目初始化时 静态解析(编译时)
默认 否(需声明)
相关推荐
阿里云云原生42 分钟前
Node.js 监控的终极补完:一次接入,全链路打通 APM、AI 观测与运行时健康
云原生·node.js
木西5 小时前
告别机械重复:使用 Node.js + Playwright 构建 24 小时全自动测试网领水脚本
前端·javascript·node.js
xiaofeichaichai6 小时前
Vite原理与Webpack对比
前端·webpack·node.js
万亿少女的梦16811 小时前
基于Node.js和Express的旅游信息管理平台设计与开发
mysql·node.js·express·系统设计·旅游信息管理
hoLzwEge1 天前
Volta实战:项目级Node版本管理 + 自定义安装目录
前端框架·node.js
laowang3571 天前
依赖故障时,日志体系需要埋哪些关键节点才能快速定位是安装失败、解析失败还是运行时缺失?
前端·javascript·vue.js·webpack·node.js
不正经开发者1 天前
Node.js process
node.js
志尊宝1 天前
Vue3 环境搭建 + 第一个 HelloVue 项目(零基础入门)
vue.js·node.js·vue·css3
张一根2 天前
ESP32+Mqtt+Node.js+Vue3 做工控界面
node.js
TE-茶叶蛋2 天前
Node.js-Phase 1 学习总结:CLI 文件管理系统
学习·node.js