JS模块化规范三

本文详细介绍了CommonJS模块规范,包括module.exports和exports的区别、模块加载机制、require方法及其实现原理。CommonJS适用于服务器端,每个文件视为独立模块,拥有独立作用域,模块仅在首次加载时运行一次。此外,文章还提到了浏览器不兼容CommonJS的原因及AMD规范的对比。
摘要由CSDN通过智能技术生成

commonjs 规范

CommonJS :

1 .了解

node应用由模块组成,采用的commonjs模块规范。**每一个文件就是一个模块,拥有自己独立的作用域,变量,以及方法等,对其他的模块都不可见。**CommonJS规范规定,每个模块内部,module变量代表当前模块。这个变量是一个对象,它的exports属性(即module.exports)是对外的接口。**加载某个模块,其实是加载该模块的module.exports属性。**require方法用于加载模块。

CommonJS模块的特点

1.所有代码都运行在模块作用域,不会污染全局作用域。

2.模块可以多次加载,但是只会在第一次加载时运行一次,然后运行结果就被缓存了,以后再加载,就直接读取缓存结果。要想让模块再次运行,必须清除缓存。

3.模块加载的顺序,按照其在代码中出现的顺序。

2.module对象

1.module.exports属性

module.exports属性表示当前模块对外输出的接口,其他文件加载该模块,实际上就是读取module.exports变量。

2.exports变量

node为每一个模块提供了一个exports变量(可以说是一个对象),指向 module.exports。这相当于每个模块中都有一句这样的命令 const exports = module.exports;

这样,在对外输出时,可以在这个变量上添加方法。例如

exports.add = function (r){
   
      return Math.PI * r *r
};

注意:不能把exports直接指向一个值,这样就相当于切断了 exports 和module.exports 的关系。例如

exports=function(x){
   
    console.log(x)
};

一个模块的对外接口,就是一个单一的值,不能使用exports输出,必须使用 module.exports输出。

module.exports=function(x){
   
    console.log(x);
}; 

为服务器提供的一种模块形式的优化

CommonJS模块建议指定一个简单的用于声明模块服务器端的API,并且不像AMD那样尝试去广泛的操心诸如io,文件系统,约定以及更多的一揽子问题。

这种形式为CommonJS所建议–它是一个把目标定在设计,原型化和标准化Javascript API的自愿者工作组。迄今为止,他们已经在模块和包方面做出了批复标准的尝试。

3.浏览器不兼容CommonJS的

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值