CommonJS规范

我这篇文章先来说一下Node.js中的CommonJS模块化规范,
然后以此再说一下ES6中官方的模块化规范,看我这篇文章ES6模块化规范

介绍

CommonJS是一种服务端模块化规范,node.js就遵守了CommonJS模块化规范。
node.js是CommonJS在服务端的一个实现,webpack打包工具也对CommonJS提供支持。

注意:CommonJS是服务端规范,在浏览器中是不可以使用的
注意:Node.js不是只支持CommonJS规范,还可以支持其他规范,但是默认的规范就是CommonJS规范

基本使用

Node.js中:一个JS文件就代表一个模块,模块内定义的变量、函数、类,只能在这个模块内使用,通过暴露变量和方法供外部使用。
其他模块需要导入此模块时,只需要通过require()来导入即可,下面说一下详细用法。

模块导出

为了实现模块的导出,Node中使用了一个叫做Module的类,每个模块其实就是一个Module的实例,叫做module。
即在每个模块中,都有一个module对象,这个对象代指的就是本模块
module对象上有一个exports对象,这个对象就作为本模块向外提供的对象,所有需要导出的对象都需要挂载到module.exports对象身上

const name = 'zhangsan'
function say(){
	console.log('Say')
}

module.exports.name = name
module.exports.say = say

在每个模块中,还有一个对象就是exports对象,其中module.exports就指向exports对象

console.log(module.exports === exports)
// true

所以我们只需要把要提供出的的变量、方法挂载到exports身上就可以了

exports.name = 'zhangsan'
exports.say = function () {
  console.log('Hello')
}

模块的导入

require()方法是Node中内置的一个方法,用来导入模块的。

在本模块中,如果需要导入其他模块,直接使用require()就可以了,必须要用一个对象来接收

  • 如果要导入本地的模块,即自定义模块,则需要给出模块的路径
  • 如果是Node.js中内置的模块或第三方模块,只需要给出模块名称就好了

先来看一下,导入内置模块或第三方模块,直接给出模块名称

const http = require('http')

如果需要导入自定义模块,则需要给出模块的路径名称

const myModule = require('./module/student.js')

后缀名.js可以省略,像这样

const myModule = require('./module/student')

在使用require()导入模块时,用一个对象来接收,这个对象本质上就是那个模块中的exports对象,所以以此来调用模块向外提供的变量、方法

require()方法内部有一个cache缓存,里面记录了本模块导入过的所有的自定义模块。
在导入模块时,会先检查缓存中是否已经加载过了,如果已经加载过了,那么就不会重复加载。
如果没有加载过,那么加载进来,并写入缓存。

CommonJS规范的缺点

加载模块是同步的,意味着只有等到要导入的模块加载完毕后,当前模块中的内容才会被加载运行。

其他JS规范

AMD、CMD是浏览器端的模块规范,但也都不是JS官方的标准规范,需要导入其规范的依赖才能使用对应的规范,目前已经很少使用了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值