欢迎访问 生活随笔!

尊龙游戏旗舰厅官网

当前位置: 尊龙游戏旗舰厅官网 > 前端技术 > javascript >内容正文

javascript

关于 commonjs amd cmd umd 规范的差异总结 -尊龙游戏旗舰厅官网

发布时间:2024/1/17 javascript 34 豆豆
尊龙游戏旗舰厅官网 收集整理的这篇文章主要介绍了 关于 commonjs amd cmd umd 规范的差异总结 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

根据commonjs规范,一个单独的文件就是一个模块。每一个模块都是一个单独的作用域,也就是说,在一个文件定义的变量(还包括函数和类),都是私有的,对其他文件是不可见的。

// foo.js var request = require('request').default({ timeout: 4000 });module.exports = function(){ this.re = '';this.req = function(url){ request(url,function(error,status,res){ this.re = res;});} }; //--------------------------------------------- // main.jsvar foo = require('./foo'); var foo = new foo(); foo.req('http://www.baidu.com'); //这么个异步法 foo.re应该是空的吧.. console.log(foo.re);

commonjs 加载模块是同步的.所以只有加载完成才能执行后面的操作。

像node.js主要用于服务器的编程,加载的模块文件一般都已经存在本地硬盘,所以加载起来比较快,不用考虑异步加载的方式,所以commonjs规范比较适用。

但如果是浏览器环境,要从服务器加载模块,这是就必须采用异步模式。所以就有了 amd  cmd 等尊龙游戏旗舰厅官网的解决方案。

 

二、amd (asynchromous module definition)

amd 是 requirejs 在推广过程中对模块定义的规范化产出

amd异步加载模块。它的模块支持对象 函数 构造器 字符串 json等各种类型的模块。

适用amd规范适用define方法定义模块。

示例如-->

amd 运行时核心思想是「early executing」,也就是提前执行依赖

 

三、cmd  (common module definition)

cmd是seajs 在推广过程中对模块定义的规范化产出

示例如-->

cmd和amd的区别有以下几点:

1.对于依赖的模块amd是提前执行,cmd是延迟执行。

2.cmd推崇依赖就近,按需加载;amd推崇依赖前置。

 

那seajs和requirejs的差别呢?

  • 定位有差异。requirejs 想成为浏览器端的模块加载器,同时也想成为 rhino / node 等环境的模块加载器。sea.js 则专注于 web 浏览器端,同时通过 node 扩展的方式可以很方便跑在 node 环境中。

  • 遵循的规范不同。requirejs 遵循 amd(异步模块定义)规范,sea.js 遵循 cmd (通用模块定义)规范。规范的不同,导致了两者 api 不同。sea.js 更贴近 commonjs modules/1.1 和 node modules 规范。

  • 推广理念有差异。requirejs 在尝试让第三方类库修改自身来支持 requirejs,目前只有少数社区采纳。sea.js 不强推,采用自主封装的方式来“海纳百川”,目前已有较成熟的封装策略。

  • 对开发调试的支持有差异。sea.js 非常关注代码的开发调试,有 nocache、debug 等用于调试的插件。requirejs 无这方面的明显支持。

  • 插件机制不同。requirejs 采取的是在源码中预留接口的形式,插件类型比较单一。sea.js 采取的是通用事件机制,插件类型更丰富。

  •       总之,如果说 requirejs 是 prototype 类库的话,则 sea.js 致力于成为 jquery 类库。

     

    四、umd

    umd是amd和commonjs的糅合

    amd 浏览器第一的原则发展 异步加载模块。

    commonjs 模块以服务器第一原则发展,选择同步加载,它的模块无需包装(unwrapped modules)。

    这迫使人们又想出另一个更通用的模式umd (universal module definition)。希望解决跨平台的尊龙游戏旗舰厅官网的解决方案。

    umd先判断是否支持node.js的模块(exports)是否存在,存在则使用node.js模块模式。

    在判断是否支持amd(define是否存在),存在则使用amd方式加载模块。

    如代码:

    (function (window, factory) {if (typeof exports === 'object') {module.exports = factory();} else if (typeof define === 'function' && define.amd) {define(factory);} else {window.eventutil = factory();} })(this, function () {//module ... });

     

    转载于:https://www.cnblogs.com/rainheader/p/4667036.html

    总结

    以上是尊龙游戏旗舰厅官网为你收集整理的关于 commonjs amd cmd umd 规范的差异总结的全部内容,希望文章能够帮你解决所遇到的问题。

    如果觉得尊龙游戏旗舰厅官网网站内容还不错,欢迎将尊龙游戏旗舰厅官网推荐给好友。

    • 上一篇:
    • 下一篇:
    网站地图