【Node.js】require到底是什么?

目录

1.Node中的JS

核心模块

2.Node.js中的作用域

3.使用require和exports连接两个模块


要想弄明白require到底是什么,我们首先得知道,在node环境中JS的几个基本特性:

1.Node中的JS

  • EcmaScript

                没有DOM、BOM,因为服务器没有页面,也就不需要DOM、BOM操作了。

  • 核心模块
  • 第三方模块
  • 自定义模块

核心模块

Node为JS提供了很多服务器界别的API,这些API绝大多数被包装到了一个具名的核心模块中了。

例如:文件操作的fs核心模块,http服务构建的http核心模块,路径操作的path核心模块,操作系统信息os核心模块....等

let fs = require('fs')  //引入文件模块

let http = require('http')    //引入http服务模块

let path = require('path')    //引入文件路径模块

注意:虽然上面的变量名可以自定义,但建议还是设置为核心模块的名称,以便于实现语义化,方便开发人员读写代码。

2.Node.js中的作用域

node中没有全局作用域,只有模块作用域

为了理解这句话,我们可以用两个例子来说明:

因为node一次只能执行一个文件,如图:

 它的结果只能执行第一个文件,结果为"hellow nodejs",而并行的文件二的内容并没有展现,因此,我们需要用到require()方法,在一个文件中引用另一个文件。

如以下示例一:

                                                                 示例1

最终打印结果顺序如下:a   b   c

                                                                 示例1

3.使用require和exports连接两个模块

既然既然是模块作用域(两个模块是封闭的),那如何让模块与模块之间进行“通信”呢?

有时候,我们加载文件的目的不是为了简简单单的执行里面的代码,更重要是为了使用里面的方法和属性

 试想有这样一个场景:我们的a文件需要引用b文件中的方法,比如引用b文件的加法操作,

我们仍然使用示例1的方式看看是否可以成功:

 很遗憾,最后失败了,错误信息是getAdd方法未定义,也就是说并没有从a.js文件中获取到b.js文件的方法。

原因很简单:Node.js中,每个文件模块都提供了一个空对象,exports。

                     也就是说,exports默认是一个空对象。

我们可以来验证一下:

 我们从a.js文件中引入了b文件,并把它放到了b_js这个变量中,输出变量后发现它的确是一个空对象。

这里,我们要重新来定义一下require的作用了:

1.加载文件模块并执行里面的代码

2.拿到被加载文件模块中的接口对象:exports, 也就是说 require方法是有返回值的,返回值就是exports空对象

而我们要做的就是,把所有需要被外部访问的成员“挂在”这个exports对象中去

操作如下:

 如上图我们可以看到,在b.js文件中,我们动态地为这个exports添加成员:foo属性以及getAdd方法,使它不再是一个空对象,因此,我们在a.js文件中就可以调用b文件里的属性和方法了,也就完成了两个文件的“通讯”方式。

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值