深入浅出nodejs(第二天)

96 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第二十八天,点击查看活动详情

深入浅出nodejs(第二天)

nodejs 模块化

nodejs的模块化,大大提高了js的复用性,也提高了开发人员的开发效率!!!

CommonJS规范

node.js遵循CommonJS规范,每个模块就是一个js文件,而require方法就用于引入模块

出发点

在js初期,很多地方都不完善,前端和后端相差较大,人们对后端的需求大于前端,也导致后期人们更加注重于后端发展,从而导致前端规范远远落后于后端,这也导致前端没有模块系统,标准库较少,即使那时ECMAScript仅定义了部分核心库,但是对文件,i/o流等常见需求都没有标准的api,所以有时有些前端开发工程师都会发现js没有什么能直接读写文件的标准库,没有标准接口,缺乏包管理系统这导致了js基本上没有自己加载和安装依赖的能力,直到CommonJS规范的提出,主要是为了弥补当前JavaScript没有标准的缺陷,以达到像Python、Ruby和Java具备开发大型应用的基础能力,而不是停留在小脚本程序的阶段。

规范引用

module对象和exports对象用于输出模块,而外部不能引用模块内部的全局变量和函数,只有通过exports对象输出的才能在外部引用。

我们可以创建一个module1.js文件

image.png

在require.js中引入module1.js文件

image.png

我们将在控制台中看到打印出了{a:1,b:2}

image.png

模块定义

在模块中,上下文提供require()方法来引入外部模块。对应引入的功能,上下文提供了exports对象用于导出当前模块的方法或者变量,并且它是唯一导出的出口。在模块中,还存在一个module对象,它代表模块自身,而exports是module的属性。在Node中,一个文件就是一个模块,将方法挂载在exports对象上作为属性即可定义导出的方式:

image.png

我们可以看到直接使用exports就可以暴露出add这个函数给其他js文件使用,这样就大大提高了js代码复用性

模块标识

模块的定义十分简单,接口也十分简洁。它的意义在于将类聚的方法和变量等限定在私有的作用域中,同时支持引入和导出功能以顺畅地连接上下游依赖。如图2-3所示,每个模块具有独立的空间,它们互不干扰,在引用时也显得干净利落。

image.png