返回
nodejs require 方法的加载规则深入解析
前端
2023-10-21 08:47:52
nodejs 中 require 方法的加载规则
引言
在 Node.js 中,require()
方法是加载模块的主要方式。它允许我们加载和使用其他模块提供的功能。本文将深入探讨 require()
方法的加载规则,了解它如何查找和加载模块。
基本原理
require()
方法通过以下步骤加载模块:
- 首先,它会在当前目录下查找模块。
- 如果找不到,它将在
node_modules
目录中查找。 - 如果仍然找不到,它将沿目录树向上查找,直到找到
node_modules
目录。 - 一旦找到模块,它将使用 CommonJS 规范或 ES 模块规范将其加载。
模块搜索路径
require()
方法在以下路径中搜索模块:
- 当前目录
node_modules
目录(当前目录下的)- 父目录的
node_modules
目录 - 以此类推,直到找到
node_modules
目录
模块名称
模块名称可以是:
- 相对路径(如
./my-module
) - 绝对路径(如
/usr/local/lib/my-module
) - 模块名称(如
express
)
如果模块名称只是一个名称,require()
方法将自动添加 .js
扩展名。
CommonJS 规范
CommonJS 规范是一种模块系统,用于在 Node.js 中加载和导出模块。使用 CommonJS 规范,模块可以导出对象、函数或值,其他模块可以通过 require()
方法访问这些对象。
ES 模块规范
ES 模块规范是 ECMAScript 标准的一部分,用于加载和导出模块。与 CommonJS 规范不同,ES 模块使用 import
和 export
来导出和导入模块。
加载规则优先级
如果模块同时存在于 CommonJS 和 ES 模块格式中,require()
方法将遵循以下优先级加载规则:
- CommonJS 模块(
.js
文件) - ES 模块(
.mjs
文件) - CommonJS 模块(
.cjs
文件)
其他注意事项
require()
方法是同步的,这意味着它会在加载模块之前阻塞代码执行。- 模块只会加载一次。如果同一模块被多次加载,它只会返回第一个加载时的实例。
- 如果加载模块时出现错误,
require()
方法将抛出一个异常。
总结
require()
方法是 Node.js 中加载模块的主要方式。它通过遵循特定路径和加载规则来查找和加载模块。理解这些规则对于有效地使用 require()
方法并构建模块化 Node.js 应用程序至关重要。