一、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 引擎提供的模块。核心模块的标识还是路径吗,其实可以是模块的名字
文件模块:由用户自己创建的模块。文件模块的标识就是我们定义模块的路径,可以是相对或绝对路径。
学完了得练一练吧,干起来!!!
定义:
引入:
执行结果:
搞定!!!!!!不积跬步无以至千里!!!