commonJS规范及nodejs的模块儿机制

2022-07-14 21:06:51 浏览数 (1)

没有苦难的人生没有任何意义,为中华民族的伟大复兴而读书。

前情回顾

上篇文章分享了的一个实现小程序的持续集成的问题,小程序的获取用户信息的接口getUserInfo将在2021-04-13号被getUserProfile替代,所以的需要考虑一下项目中是否需要更新了。

今天要重新回顾一下commonJS规范nodejs的模块儿机制,这篇讲不完的话, 下篇会接着聊这个话题。

规范和模块机制产生的背景

Javascript在很长一段时间内被认为是一种网页脚本web1.0时代大致用来做表单校验或者做网页特效。web2.0时代,慢慢被重视起来,大致经历了工具类库(jquey用来兼容浏览器)-->组件(开发功能模块)-->框架(功能模块儿组织)-->应用(业务模块组织)这么几个过程的变迁。

在这种变迁的过程中,js不断的被抽象、聚合。相对于用script标签组织代码,抽象后的js能够更好的组织业务逻辑,尤其是node出现之后,js的前端应用更加活跃,慢慢的社区为Javascript定制了相应的规范。

Commonjs规范的远景

Commonjs规范 的一个出发点是:希望javascript能够运行在任何地方

在实际工作中,Javascript的工作场景基本仅限于宿主浏览器中API支持程度,虽然web2.0以后,HTML5崭露头角后,浏览器中出现了很多新的,强大的API, 但是相对于其他语言,JavaScript本身的规范还是非常薄弱。

  • 没有模块系统
  • 标准库少
  • 没有标准接口
  • 缺乏包管理系统

Commonjs规范 为JavaScript开发大型应用指明了道路,这些规范包括:模块二进制Buffer,字符集I/O流文件系统套接字...

Commonjs规范的使用

Commonjs规范 的使用非常简单,主要有模块引用模块定义模块标识三个部分。

  • 模块引用。示例代码:
代码语言:javascript复制
// 采用require方法引入模块API
var fs =  require('fs')

  • 模块定义。在模块中存在一个module对象,代表模块儿本身,同时上下文环境提供了一个exports对象用于导出当前模块的方法或变量,并且是唯一导出的出口。同时,exportsmodule的属性。在Node中一个文件就是一个模块。示例代码:
代码语言:javascript复制
// saveToken.js
const fs =  require('fs')

module.exports = function (filename,readStream){
    return new Promise(resolve=>{
        const writeStream = fs.createWriteStream(filename);
        writeStream.on('finish',()=>{
            setTimeout(resolve,100);
        })
        readStream.pipe(writeStream)
    })
}

  • 模块标识。模块标识其实就是传递给require()方法的参数,必须是合格小驼峰命名的字符串,或者以.,..开头的相对路径或绝对路径,可以忽略后缀名js

这样一来,每个模块具有独立的空间且互不干扰,整个业务逻辑也显得清晰。

Node模块儿

在Node中,模块儿可以分为两大类,一类是Node提供的模块成为核心模块;另一类是用户编写的模块,成为文件模块

在Node中引入模块,大致会经历这么几个过程:

  • 路径分析
  • 文件定位
  • 编译执行

今天先分享到这里,下篇文章会讲解这几个过程

总结

  • CommonJs规范背景
  • CommonJs规范可以解决什么问题
  • CommonJs规范简单使用

javascript基础知识总结

0 人点赞