NodeJS | 模块的概念(二)

Javascript天生的缺点

熟悉JS的都知道,我们可以通过var或function定义一个全局访问的变量或函数。但是当有多人协作或大量引入JS文件时,那么变量和函数就很容易重写和覆盖,特别是有很多依赖关系的时候,很容易出错。这是因为Javascript天生就缺少模块管理机制,来隔离JS片段相互影响,因此我们常采用命名空间的方式:将变量和函数限制在某个特定的作用域内。从而保证代码安全执行。

Commonjs规范

它不是一个具体负责某个职能的JS库,它是一套规范,来规定Javascript怎么去组织,怎么去编写。同时大部分的标准都在拟定和讨论之中的。首先是把执行不同的任务的代码块或代码文件看做独立的模块,每个模块都是有独立的作用域,模块间可以有依赖关系。对于一个模块可以分成3个关键部分:定义、标识、引用。这种设计规范在社区内不断成长壮大,对许多开源的产品产生了极大的推动作用,比如nodejs/couchdb,都是对这个规范的实现,虽然不是百分百的实现,但又反馈给社区,促进进一步的优化,从而形成一个良性的循环链,彼此推动。

nodejs借鉴了Commonjs模块组织的理念,形成了一套模块管理系统。在nodejs里面,每一个JS文件可以看成一个独立的模块,在里面不需要有命名空间,不用担心变量污染和方法使用时的隔离,整个文件中的代码可以非常自然的组织起来。同时,这些独立的模块/文件通过彼此的依赖和引入可以组合成更强大、更完整的模块/功能包。

我们安装nodejs时,会同时安装NPM包管理工具,通过这个工具,我们可以像项目中引入各种形形色色的模块。

模块的分类

在nodejs里面,文件和模块是一一对应的,模块有几种类型,大概分为:

  1. 核心模块 http fs path...——将在最后接触
  2. 本地模块(同事们创建) var util=require('./util.js')——后面学习第一个接触
  3. 第三方模块(通过NPM安装的) var promise = require('bluebird')——第二个接触

引用方式

根据模块的类型,有几种引用的方式。

在nodejs里面,可以通过文件路径来引用模块,也可以通过模块名。如果用名称引用非核心模块,nodejs最终会把模块名映射到对应模块文件的路径。包含核心模块的模块会在node启动时预先加载。

到此总结下,上面说了很多,其实只要记住nodejs是模块化的管理机制,并且模块分为三种:node启动时预先加载的核心模块、自己或同事创建的本地模块、通过NPM加载的第三方模块。并且不同模块有不同的引入方式。

实现一个本地模块的流程

  1. 创建模块 teacher.js 创建一个JS文件,里面添加特定的功能
  2. 导出模块 exports.add=function(){} 功能和模块名建立关系
  3. 加载模块 var teacher=require('./teacher.js') 其他文件引入,并加载模块
  4. 使用模块 teacher.add('张三') 直接调用模块中的方法

注意exports有加s

exports与module.exports区别

它们两调用的功能是一样的,如果你想让你的模块成为特别的对象类型,那么请使用module.exports,如果你想让你的模块成为传统的模块实例,那就使用exports。现也不深究,后面学的时候,再研究。推荐使用exports。

猜你喜欢

转载自blog.csdn.net/weixin_37930716/article/details/81901306