最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 彻底搞清CommonJS、AMD、CMD...

    正文概述 掘金(唐_银)   2020-12-25   695

    发展过程

    CommonJS、AMD、CMD、requeir, moudle.exports, exports,import,export...原地爆炸...

    先从时间线上大概对这几种规范有个大致了解

    • 2009 -> CommonJS
    • 2010 -> AMD规范
    • 2011 -> CMD规范
    • 2015 -> ES6 Module

    CommonJS

    CommonJS规范诞生比较早,Mozilla工程师Kevin Dangoo在2009年发起,它出现的目的是希望JS可以运行到更多地方,主要是服务端,前期的nodejs采用了这种规范。

    用法示例

    module.exports或exports负责对外暴漏数据,require来引入

    <!--a.js-->
    module.exports = {
        name: '四大名将'
    }
    <!--也可以用exports导出-->
    <!--export.name = '四大名将'-->
    
    <!--b.js-->
    const res = require('./a.js')
    console.log(res.name) // 四大名将
    
    module.exports 和 exports的区别

    乍一看,还以为CommonJS提供了两种方法来导出数据,其实不然,require并不认识exports,之所以它也好使,那是因为模块内部这些代码的作用。

    var module = {
        exports: {
            <!--导出的内容-->
        }
    }
    
    var exports = module.exports
    return module.exports
    

    require方能看到的只有module.exports这个对象,它是看不到exports这个对象的,而我们在编写模块时用到的exports实际上是对module.exports的引用。

    举个例子
    <!--a.js-->
    exports = {
        name: '四大名将'
    }
    如果这样导出,exports被重新赋值,指向的地址便不再是module.exports,所以此时的exports失去了它的导出功能,只会导出一个默认空对象
    

    AMD (Asynchronous Module Definition)

    AMD规范在2010由requireJS提出,CommonJS规范主要是弥补服务端的模块化机制,不像服务器加载速度很快,客户端加载时需要等待,可能存在假死情况,鉴于浏览器的特殊情况,AMD规范出来了,它采用异步方式加载模块定义的所有依赖,在依赖加载完成后再执行回调函数。

    define([module-name?], [dependencies?], [factory])

    • module-name:字符串,模块名称(可选)
    • dependencies:要载入的依赖模块(可选),数组格式,相对路径
    • factory: 工厂方法,返回一个模块函数
    <!-- 定义模块 -->
    <!-- AMD中require的模块会先加载完成 依赖前置 提前执行 -->
    define('module', ['dep1', 'dep2'], function(dep1, dep2){
      function foo(){
          dep1.doSomething();
          dep2.doSomething();
      }
      return {
        foo : foo
      };
    })
    
    <!-- 数组中声明需要加载的模块,可以是模块名、js文件路径 -->
    <!-- 两个参数:加载的模块,加载成功后的回调函数 -->
    require(['module'], function(module){
        module.foo()
    });
    

    CMD (Common Module Definition)

    CMD规范在2011年由seaJS提出,CMD规范和AMD规范类似,主要区别是CMD规范是就近加载依赖,延迟执行,只有到require时依赖才执行。

    <!-- a.js -->
    define(function(require, exports, module) {
      function foo(){
        <!-- require的模块此时才会执行 依赖就近 延迟执行 而AMD中依赖是前置的 一开始就全都执行完毕了  -->
        var dep1 = require('dep1') 
        dep1.doSomething();
     }
     <!--暴漏给外部调用-->
     exports.foo = foo
     
     /** return或者exports都行
     return {
       foo : foo
     };
     **/
    });
    <!-- b.js -->
    seajs.use("./a", function(a){
      a.foo()
    });
    
    

    ES6 Module

    2015年es6横空出世,引入了新特性 ES Module,诸如export, import等命令。

    es6的module比较常用,贴一个阮一峰的es6链接ES6 Module


    最后,圣诞快乐~


    起源地下载网 » 彻底搞清CommonJS、AMD、CMD...

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元