开启掘金成长之旅!这是我参与「掘金日新计划 · 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文件
在require.js中引入module1.js文件
我们将在控制台中看到打印出了{a:1,b:2}
模块定义
在模块中,上下文提供require()方法来引入外部模块。对应引入的功能,上下文提供了exports对象用于导出当前模块的方法或者变量,并且它是唯一导出的出口。在模块中,还存在一个module对象,它代表模块自身,而exports是module的属性。在Node中,一个文件就是一个模块,将方法挂载在exports对象上作为属性即可定义导出的方式:
我们可以看到直接使用exports就可以暴露出add这个函数给其他js文件使用,这样就大大提高了js代码复用性
模块标识
模块的定义十分简单,接口也十分简洁。它的意义在于将类聚的方法和变量等限定在私有的作用域中,同时支持引入和导出功能以顺畅地连接上下游依赖。如图2-3所示,每个模块具有独立的空间,它们互不干扰,在引用时也显得干净利落。