RequireJs

CommonJs

    随着js的不断发展,使得js可以运行在服务器中,node.js,然而服务器端得逻辑比客户端的复杂,按客户端以前的编程方式会死人的

    以前是用一个变量定义运行的方法

    依赖关系的引用是全局变量通过html脚本加载的

    依赖关系非常弱,开发者需要知道正确的依赖顺序,例如,包含主干文件不能在jq文件之前引入

    引入一个脚本需要额外的工具引入他的依赖项。

    应运而生CommonJs标准,将js代码模块化,cjs中一个文件中定义一个模块,一个传输格式会捆绑一个文件的多个模块用于优化,cjs会计算文件的依赖项,知道文件正确的加载顺序,但是cjs只适合服务器端不适合浏览器,因为它是同步加载的,每次进入界面之前要先等文件加载完成非常的耗时,但为什么适合服务器呢,可能是因为每次启动的时候就先加载到磁盘里,应用的时候没有影响。

AMD

    为了浏览器又在CommonJs的基础上生成了AMD标准,AMD将每个依赖定义一个id,清楚标明了每个依赖同时避免了全局变量乱用的问题,优于CommonJs的地方是AMD可以异步加载文件,允许设置一个方法作为模块的返回值,创建方法的时候特别有用。代表的应用是requireJs,requireJs是AMD的实现,用于引入管理js代码。

CMD

    CMD支持懒加载,AMD的文件必须在开头声明好,而CMD的文件可以在用的时候再声明,requireJs2.0版本支持CMD的方式。

define(function(require,exports,module){
   var Moudle1 = require("./moudel");
   var ThisModule = function(){
      //TODO ...
   };
   module.exports = ThisModule;
})

    require是一个方法,通过模块的唯一标识符获取其他模块的接口

    exports是一个属性,定义对外的返回接口

        exports.do为返回的方法

        exports.foo为返回的属性

    module定义了模块的特性

        module.id模块的id

        module.url模块的url

        module.exports模块的返回接口

        module.dependencies模块的依赖项

    在Html中的引入<script data-main="/assert/main.js" src="/lib/requireJs.js">,一般data-main是起始模块,在其中的相对路径就是这个模块文件的路径,再后面引入的模块的相对路径也是模块文件的路径,可以用baseUrl 设置所有模块的根路径,可以用urlArgs为文件后面加后缀,在清除文件缓存的时候有用

urlArgs: "bust=" +  (new Date()).getTime()

参考

http://requirejs.org/docs/whyamd.html#commonjs

http://blog.chinaunix.net/uid-26672038-id-4112229.html

转载于:https://my.oschina.net/u/3386584/blog/869558

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值