一、commonJs规范
说到commonjs的规范,为什么会有这个东西的出现呢?这就不得不说ECAMAScript的缺陷,那么有什么缺陷,如下几点:
1、没有模块系统
2、标准库较少
3、没有标准接口
4、缺乏管理系统
模块化
1、如果程序设计的规模达到一定程度,则必须对其进行模块化。
2、模块化可以有多种形式,但是至少应该提供能够将代码分割为多个源文件的机制。
3、CommonJs的模块功能可以帮助我们解决该问题。
CommonJs规范
1、commonJs规范的提出,主要为了弥补当前Javascript没有标准的缺陷。
2、commonJs规范为Js指定了美好的愿景,希望js能够在任何地方使用。
3、commonJs对模块的定义十分简单
- 模块引用
- 模块定义
- 模块标识
模块的定义
模块的引用
这个时候我怎么验证我的模块1引入成功了呢? 是不是我执行模块2的代码,看看模块1是不是被执行呀!
这时候作为初学者的我来说,觉得这个引入没有意义啊,为什么呢?因为这个不就相当于执行了模块1嘛,我想肯定不是这样子的啊,肯定是要在模块1中定义的变量或者方法,在模块2中可以使用才是有意义的嘛,那么我们在模块1中先这样捣鼓两个变量看看行不行? 实践出真知,走起!
module01.js:
module02.js:
天啦噜!卧槽!!!!白引入了啊。
其实不然,在Node中的使用不是这样子的兄dei姐mei。
使用require()引入模块以后,该函数会返回一个对象,这个对象代表的是引入的模块
module02.js
哎呦这个怎么一穷二白啊,我在模块1中定义的变量呢?? 怎么弄啊? 烦死了,兄弟不要烦,还有一个知识点,需要告诉你。
在Nodejs中,每一个js文件中的js代码独立运行在一个函数中的,那么在全局中就看不见了,所以不是全局作用域
所以一个模块中的变量和函数在其他的模块中是无法访问的。
那么大家都是密闭的玩,那模块和模块之间就没得玩了,么的聊了,那么怎么办,就需要我的模块向外部暴露属性或者方法。
我们可以通过exports
【当作一个全局变量】,来向外部暴露变量或者方法,
使用方式:
- 只需要将需要暴露给外部的变量和方法设置为exports的属性即可
module01.js
module02.js运行的结果为:
好了好了,成功了哦!!!
模块的表示
我们使用 require() 引入外部模块时,使用的就是模块的标识,我们可以通过模块的标识来找到指定的模块。
模块分为两大类:
- 核心模块: 由node引擎提供的模块。
核心模块的标识还是路径吗,其实可以是模块的名字
- 文件模块: 由用户自己创建的模块。
文件模块的标识就是我们定义模块的路径,可以是相对或绝对路径。
学完了得练一练吧,干起来!!!
定义:
引入:
执行结果:
搞定!!!!!!不积跬步无以至千里!!!
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。