node.js - require()方法

require的功能:

require()的功能有两个:

1、引入文件,例如:核心模块,本地文件....
2、拿到被加载文件中导出的接口对象(exports)...

0x01 引入本地文件

引入本地文件后,会执行引入文件中的代码。

各个文件中的变量只在各自的文件中生效,不会相互影响。

如果想要使用另一个文件中的数据需要将该数据添加到exports对象中。

注意:
  * 如果引入本地本地文件,使用相对路径必须写上 ./ ,否则会认为引入的是核心模块。
  * 如果引入的是本地文件,可以忽略后缀名。

例如:

require("./b");

0x02 require中的exports对象

require还有一个作用,就是可以拿到加载文件中导出的接口对象。

  • A文件想要打印B文件中的数据,默认是不可以的,因为node.js中的作用域是模块,每个文件中的数据只在自己文件中生效。

  • 但是每个模块(文件)中都有一个exports对象,require可以拿到被引入文件中的exports对象,exports对象默认是空的,需要手动为它添加属性。

  • 但是如果将B文件中的数据添加到exports对象中的属性中去,这样A文件在执行require(“./B.js”)时,就可以拿到B文件中的exports对象了。

//A.js - 例如想要拿到B.js中的age变量

//require()可以拿到被加载文件中的exports对象。
//所以在B.js中将age添加到这个对象中。
var bFile = require("./B.js");
console.log(bFile.age); //打印B.js文件里exports对象中的age属性。
//B.js
var age = 19;
//将age添加到exports对象中
exports.age = age;

案列:

//a.js - 拿b.js中的变量和函数
var bFile = require("./b.js");
//b.js
var name = "小明";
var age = 19;
var sayHi = function(){
    console.log("Hi!我是" + name + ",今年" + age + "岁了。");
}
//对外提供的数据添加到exports对象中
exports.name = name;
exports.age = age;
exports.sayHi = sayHi;

0x03 小知识:

module变量代表当前文件,这个变量是一个对象,它的属性exports是对外的接口。

使用moduble.exports和使用exports效果一样(为了方便),因为在每个文件的头部都有这样一行命令。
var exports = module.exports;

所以不能将exports指向其他值,否则这两个就没了关联,会产生意外。

发表评论 / Comment

用心评论~