浅析JavaScript中的模块规范

一、CommonJS

        为了JavaScript的表现定制规范,因为JavaScript没有模块的功能,所以CommonJS应运而生,它希望JavaScript可以在任何地方运行,不止在浏览器中。

CommonJS定义的模块分为: { 模块引用(require) },{ 模块定义(export) },{ 模块标识(module) }

require() : 引入外部模块。

export对象用于导出当前模式块的方法或变量,唯一的导出口。

module对象就代表模块本身。

//sum.js

exports.sum = function(){...做加操作..};

//calculate.js

var math = require('sum');

exports.add = function(n){

return math.sum(val,n);

};

      虽说node遵循CommonJS的规范,但是相比也是做了一些取舍,填了一些新东西的。NPM作为node的包管理器,就是为了帮助node解决依赖包的安装问题,所以它肯定也要遵循CommonJS规范,它遵循包规范。


CommonJS是主要为了JavaScript在后端的表现制定的,不适合前端JavaScript。分析一下浏览器端JavaScript和服务器端JavaScript主要做了哪些事。

服务器端JavaScript:相同的代码需要多次 执行,CPU和内存资源是瓶颈,加载时从磁盘中加载。

浏览器端JavaScript:代码需要从一个服务器分发到多个客户端执行,带宽是瓶颈,加载时需要通过网络加载。


二、AMD

       异步模块定义,主要为前端JavaScript表现制定规范。

       AMD就只有一个接口:define(id?,dependencies?,factory);它要在声明模块的时候制定所有的依赖(dcp),并且还要当做形参传到factory中,像这样:

 define(['dep1','dep2'],function(dep1,dep2){ …… });

要是没什么依赖,就定义简单的模块,下面这样就可以:

define( function(){ var exports = {} ; export.method = function(){……};return exports; } );

define  包装, node中隐式包装,RequireJS实现了AMD规范。


三、CMD

        seajs遵循CMD规范,与AMD蛮相近,有中文版。

        define( function( require, export, module ){  …… }  );

你可能感兴趣的:(浅析JavaScript中的模块规范)