Node.js 中的 require() 函数详解

阅读时长 4 分钟读完

介绍

在 Node.js 中,require() 函数是非常常用的函数之一。它的作用是加载一个模块或者文件,并返回该模块或者文件的导出内容。使用 require() 函数可以很方便地组织和重用代码,因为一个模块可以被其他模块多次引用。

使用示例

假设我们有两个文件 app.jsutil.js,其中 util.js 中定义了一些公用的函数:

app.js 中,我们想要使用 util.js 中的函数,就可以使用 require() 函数来加载 util.js 文件:

在上面的示例中,我们使用 const util = require('./util') 语句来加载 util.js 文件,并将导出内容赋值给 util 变量。然后就可以使用 util 变量来调用 util.js 中导出的函数了。

加载规则

使用 require() 函数时,Node.js 会按照一定的规则查找模块或者文件。查找规则如下:

  1. 如果参数是一个内置模块(比如 http),则直接返回内置模块。
  2. 如果参数是一个以 ./ 或者 ../ 开头的相对路径,则根据当前文件的位置来查找文件。
  3. 如果参数是一个以 / 开头的绝对路径,则从根目录开始查找文件。
  4. 如果参数不是上述情况,则从 node_modules 目录下查找同名文件夹,然后在文件夹中查找 package.json 文件。如果找到 package.json 文件,再根据 main 字段来查找文件。如果没有找到 package.json 或者 main 字段,则默认查找 index.js 或者 index.node 文件。

导出内容

在一个模块中,可以通过 module.exports 或者 exports 对象来导出内容。使用 module.exports 导出时,可以直接导出一个对象、函数、类等,例如:

使用 exports 导出时,需要给 exports 对象添加属性或者方法。例如:

使用 module.exportsexports 导出时,需要注意的是,如果要同时导出多个内容,应该使用 module.exports,因为 exports 只是 module.exports 的一个引用。

循环依赖

使用 require() 函数时,如果两个模块相互依赖,就会产生循环依赖。例如:

在上面的示例中,a.js 依赖了 b.jsb.js 依赖了 a.js,就会产生循环依赖。解决循环依赖的一种方式是,将共同的代码放在一个第三个模块中,并将其作为参数传递给 a.jsb.js。例如:

-- -------------------- ---- -------
-----------
--------- - --------
--------- - --------

------
----- - - - - --------------------
--------- - --------
--------- - --

------
----- - - - - --------------------
--------- - --
--------- - --------

结论

require() 函数是 Node.js 中非常强大的一个函数,学好它对于前端工程师来说非常重要。在使用 require() 函数时,还需要注意文件的加载规则和导出方式等问题,避免产生循环依赖等问题。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/66f51843c5c563ced56c7ba6

纠错
反馈