查看: 1712|回复: 0

[JavaScript/JQuery] CommonJS& RequireJS&SeaJS三者概念的详细介绍 Posted on 2017-09-16 12:45 星点

发表于 2017-9-23 08:00:01
句号论坛

当前端越来越发展的时候,传统的开发已经不能满足于前端性能和工程化的要求,所以作为一名高级的前端开发人员,必须要学习前端模块化方面的知识;

下面主要谈一下,common.js require.js&sea.js这三者的相关介绍;

common.js

commonjs是伴随着Node.js一起出现的,Node 应用由模块组成,采用就是 CommonJS 模块规范;

CommonJS API定义很多普通应用程序(主要指非浏览器的应用)使用的API,从而填补了这个空白。它的终极目标是提供一个类似Python,Ruby和Java标准库。这样的话,开发者可以使用CommonJS API编写应用程序,然后这些应用可以运行在不同的JavaScript解释器和不同的主机环境中。在兼容CommonJS的系统中,你可以实用JavaScript程序开发:

服务器端JavaScript应用程序
命令行工具
图形界面应用程序
混合应用程序(如,Titanium或Adobe AIR)

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

require()用来引入外部模块;exports对象用于导出当前模块的方法或变量,唯一的导出口;module对象就代表模块本身。

AMD 与 RequireJS AMD Asynchronous Module Definition,就是 异步模块定义,所有的模块将被异步加载,模块加载不影响后面语句运行。所有依赖某些模块的语句均放置在回调函数中。 AMD规范定义了一个自由变量或者说是全局变量 define 的函数。

define( id?, dependencies?, factory );

AMD规范 https://github.com/amdjs/amdjs-api/wiki/AMD 第一个参数 id 为字符串类型,表示了模块标识,为可选参数。若不存在则模块标识应该默认定义为在加载器中被请求脚本的标识。如果存在,那么模块标识必须为顶层的或者一个绝对的标识。 第二个参数,dependencies ,是一个当前模块依赖的,已被模块定义的模块标识的数组字面量。 第三个参数,factory,是一个需要进行实例化的函数或者一个对象。 创建模块标识为 alpha 的模块,依赖于 require, export,和标识为 beta 的模块
  1. define("alpha", [ "require", "exports", "beta" ], function( require, exports, beta ){
  2. export.verb = function(){
  3. return beta.verb();
  4. // or:
  5. return require("beta").verb();
  6. }
  7. });
复制代码
RequireJS 官网 http://www.requirejs.org/ API http://www.requirejs.org/docs/api.html RequireJS 是一个前端的模块化管理的工具库,遵循AMD规范,它的作者就是AMD规范的创始人 James Burke。所以说RequireJS是对AMD规范的阐述一点也不为过。 RequireJS 的基本思想为:通过一个函数来将所有所需要的或者说所依赖的模块实现装载进来,然后返回一个新的函数(模块),我们所有的关于新模块的业务代码都在这个函数内部操作,其内部也可无限制的使用已经加载进来的以来的模块。 CMD 与 seaJS CMD 在CMD中,一个模块就是一个文件,格式为: define( factory ); 全局函数define,用来定义模块。 参数 factory 可以是一个函数,也可以为对象或者字符串。 当 factory 为对象、字符串时,表示模块的接口就是该对象、字符串。 seaJS 官网 http://seajs.org/docs/ API快速参考 https://github.com/seajs/seajs/issues/266
sea.js 核心特征: 1. 遵循CMD规范,与NodeJS般的书写模块代码。 2. 依赖自动加载,配置清晰简洁。 AMD 与 CMD 的区别? 下面是玉伯对于 AMD 与 CMD 区别的解释: AMD 是 RequireJS 在推广过程中对模块定义的规范化产出。 CMD 是 SeaJS 在推广过程中对模块定义的规范化产出。 类似的还有 CommonJS Modules/2.0 规范,是 BravoJS 在推广过程中对模块定义的规范化产出还有不少?? 这些规范的目的都是为了 JavaScript 的模块化开发,特别是在浏览器端的。 目前这些规范的实现都能达成浏览器端模块化开发的目的。 区别: 1. 对于依赖的模块,AMD 是提前执行,CMD 是延迟执行。不过 RequireJS 从 2.0 开始,也改成可以延迟执行(根据写法不同,处理方式不同)。CMD 推崇 as lazy as possible. 2. CMD 推崇依赖就近,AMD 推崇依赖前置。 代码如下:
  1. // CMD
  2. define(function(require, exports, module) {
  3. var a = require('./a')
  4. a.doSomething()
  5. // 此处略去 100 行
  6. var b = require('./b') // 依赖可以就近书写
  7. b.doSomething()
  8. // ...
  9. })
  10. // AMD 默认推荐的是
  11. define(['./a', './b'], function(a, b) { // 依赖必须一开始就写好
  12. a.doSomething()
  13. // 此处略去 100 行
  14. b.doSomething()
  15. // ...
  16. })
复制代码



太阳http代理AD
回复

使用道具 举报

关闭

站长推荐上一条 /1 下一条