没有苦难的人生么有任何意义,为中华民族的伟大复兴而读书。
前情回顾
上篇文章分享了的一个实现小程序的持续集成的问题,小程序的获取用户信息的接口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规范 的使用非常简单,主要有模块引用,模块定义,模块标识三个部分。
模块引用。示例代码:
// 采用require方法引入模块API
var fs = require('fs')
模块定义。在模块中存在一个module对象,代表模块儿本身,同时上下文环境提供了一个exports对象用于导出当前模块的方法或变量,并且是唯一导出的出口。同时,exports是module的属性。在Node中一个文件就是一个模块。示例代码:
// 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高级程序设计》 - 不妨
「转发一下」,好东西要记得分享