欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JavaScript模块化开发(二)——CommonJS规范

程序员文章站 2022-07-04 22:38:19
...

本文转载自原地址,感谢Feeldesign Studio的无私分享!

 

从本文开始介绍常见的模块化规范。

模块化规范,主要是为了统一模块化的编写方式,比如不同团队的Java代码,总能用import的方式来加载,C#的话也有using,JavaScript本身没有内置的模块系统(ES6中引入了模块系统,不过等到普及可能是n年后的事情了),JavaScript的模块化规范,一般都是致力于提高 JavaScript 程序的可移植性和可交换性,朝着统一模块化交互方式的方向而努力。

CommonJS 的目标是定义一套普通应用程序使用的API,从而填补原生JavaScript标准库过少的缺点。终极目标是实现一个像python,java中含有的标准库。现在非常火爆的node.js实际上就是CommonJS 的一个实现。

CommonJS 标准大致如下

CommonJS有一个全局性的方法 require(),主要用于加载模块,加载后,就可以调用模块的方法; 

var math = require('math');
math.add(2,3);

math 模块的add方法是怎么定义的呢,CommonJS还有一个全局变量 exports,它用来导入模块的方法,通过它导入的方法,便是这个模块的API,可供调用:

//math.js
exports.add = function() {
    var sum = 0, i = 0, args = arguments, l = args.length;
    while (i < l) {
        sum += args[i++];
    }
    return sum;
};

在模块里,还有一个变量module,它有一个只读的id属性,还有一个uri属性。 

其他还有一些命名规范和识别规范。 

通过 CommonJS 的规范和代码可以看出,require 是同步的,模块系统需要同步读取模块文件内容,并编译执行以得到模块接口。在服务端,比如node.js,这一般来说没有问题,文件请求都是本地获取,对性能没有什么影响。但是放在浏览器端,问题就出来了,等到所有模块同步加载完毕,时间不知道要过去多久了。 

CommonJS 最早叫做 ServerJS,Modules 1.0规范在node.js上实践的很好,由于知道自身在浏览器中的不足,CommonJS社区把名字改为CommonJS,意为想统一服务器端和浏览器端,但是要实现浏览器端,就要有新的版本的标准,在新的版本制定过程中,社区出现了分歧,在这个分歧中,分出了AMD规范。 

由于风格和机制的差异,最终,AMD从CommonJS社区中独立了出来,成为了现在最受欢迎的规范。接下来的文章里,会介绍这个规范。

 

 

相关标签: CommonJS规范