前端模块化 、包管理器、AMD、 CMD、 require.js 、sea.js

问题由来,为何要前端模块化管理:

假设咱们有个组件名为Acomponent.js, 是架构封装的,里面依赖另外一个公司公用库common.js; 那咱们引入Acomponent.js的时候,怎么知道要引入common.js? 看文档? demo写的每每忘掉写这些,若是相似common.js太多,那只能引入后人工排错; 事实上做为一个使用方,我并不想关心这些;html

java 的maven和.net的Nuget 的引入,就是为了解决相互依赖这种问题; 使用方引入一个包,并不须要挨个引入它须要的包,彻底自动管理;前端

而js前端模块化规范也须要相似的组件管理, AMD、CMD规范应运而生:java

个人理解,maven、 nuget、 requirejs、 seajs 都是同样的东西,就是包管理器
jquery

 

看了下AMD CMD的简介,和ECMA的历史,手动记录下:

  AMD的表明require.js ,CMD的表明sea.jsgit

二者的区别主要是加载时机,其实都是先加载再执行, 对于依赖的模块,AMD 是提早执行,CMD 是延迟执行 github

CMD 推崇依赖就近,AMD 推崇依赖前置  https://www.zhihu.com/question/20351507/answer/14859415架构

实际应用的话建议用require.js ,不少地方都在说seajs不行啦,好比 https://github.com/seajs/seajs/issues/1605框架

关于requirejs的用法就不写了,找到一个比较好的转载下到博客园来 http://www.cnblogs.com/binlin1987/articles/7060822.html异步

  

想了下为何之前的项目没有引入requirejs:

    之前的项目大多这么几个js:maven

    jquery.js 这个不说了,必备

    easyui.js 或者 jqueryui.js 或者 kendo.js ;这个都是外部组件框架

    common.js 公司内部公用库,解决日期转换,数字精度转换等公用方法

    XXXcomm.js 公司内部组件库,架构封装的组织机构,人员管理等结构树组件

    XXXcomponent.js 偶尔easyUI,kendoUI等组件不够用的时候额外加个三方组件,不必定有

 

    这些js很少,没有依赖到必须异步延迟加载的地步;

    页面结构简单,XXXcomm.js 公司内部组件实际只有三五个,顶多依赖于jquery和common.js, 封装到了一个js文件中 ,依赖不复杂,页面头部一次引入就好,忘不掉;

    好吧,仍是页面简单,js都打包了,总共十个之内的js文件,直接加到html头就能够了,不会发生漏掉js致使组件报错 :) 并且组件封装的时候,也会特别注意最好不要依赖jquery之外别的东西;再复杂点的页面,自定义组件不少,依赖太严重的时候,确实须要requirejs帮助管理,在每一个组件内部写好依赖,使用方无需关注,

    往长远看,新项目启动的时候,加入requirejs比较好,学习成本不大,半天就会用了,好处多多

相关文章
相关标签/搜索