介绍
在 Node.js 中,require()
函数是非常常用的函数之一。它的作用是加载一个模块或者文件,并返回该模块或者文件的导出内容。使用 require()
函数可以很方便地组织和重用代码,因为一个模块可以被其他模块多次引用。
使用示例
假设我们有两个文件 app.js
和 util.js
,其中 util.js
中定义了一些公用的函数:
//util.js exports.add = function(a, b) { return a + b; } exports.sub = function(a, b) { return a - b; }
在 app.js
中,我们想要使用 util.js
中的函数,就可以使用 require()
函数来加载 util.js
文件:
//app.js const util = require('./util'); console.log(util.add(1, 2)); //输出 3 console.log(util.sub(3, 4)); //输出 -1
在上面的示例中,我们使用 const util = require('./util')
语句来加载 util.js
文件,并将导出内容赋值给 util
变量。然后就可以使用 util
变量来调用 util.js
中导出的函数了。
加载规则
使用 require()
函数时,Node.js 会按照一定的规则查找模块或者文件。查找规则如下:
- 如果参数是一个内置模块(比如
http
),则直接返回内置模块。 - 如果参数是一个以
./
或者../
开头的相对路径,则根据当前文件的位置来查找文件。 - 如果参数是一个以
/
开头的绝对路径,则从根目录开始查找文件。 - 如果参数不是上述情况,则从
node_modules
目录下查找同名文件夹,然后在文件夹中查找package.json
文件。如果找到package.json
文件,再根据main
字段来查找文件。如果没有找到package.json
或者main
字段,则默认查找index.js
或者index.node
文件。
导出内容
在一个模块中,可以通过 module.exports
或者 exports
对象来导出内容。使用 module.exports
导出时,可以直接导出一个对象、函数、类等,例如:
module.exports = { add: function(a, b) { return a + b; }, sub: function(a, b) { return a - b; } };
使用 exports
导出时,需要给 exports
对象添加属性或者方法。例如:
exports.add = function(a, b) { return a + b; } exports.sub = function(a, b) { return a - b; }
使用 module.exports
和 exports
导出时,需要注意的是,如果要同时导出多个内容,应该使用 module.exports
,因为 exports
只是 module.exports
的一个引用。
循环依赖
使用 require()
函数时,如果两个模块相互依赖,就会产生循环依赖。例如:
//a.js const b = require('./b'); exports.a = 'hello'; //b.js const a = require('./a'); exports.b = 'world';
在上面的示例中,a.js
依赖了 b.js
,b.js
依赖了 a.js
,就会产生循环依赖。解决循环依赖的一种方式是,将共同的代码放在一个第三个模块中,并将其作为参数传递给 a.js
和 b.js
。例如:
-- -------------------- ---- ------- ----------- --------- - -------- --------- - -------- ------ ----- - - - - -------------------- --------- - -------- --------- - -- ------ ----- - - - - -------------------- --------- - -- --------- - --------
结论
require()
函数是 Node.js 中非常强大的一个函数,学好它对于前端工程师来说非常重要。在使用 require()
函数时,还需要注意文件的加载规则和导出方式等问题,避免产生循环依赖等问题。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/66f51843c5c563ced56c7ba6