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

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

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

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

我的理解,maven、 nuget、 requirejs、 seajs 都是一样的东西,就是包管理器

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

  AMD的代表require.js ,CMD的代表sea.js;

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

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:

    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比较好,学习成本不大,半天就会用了,好处多多

前端模块化 、包管理器、AMD、 CMD、 require.js 、sea.js的更多相关文章

  1. 前端模块化之CommonJS,ES6,AMD,CMD

    最近在搞跨平台解决方案,讨论关于模块划分的问题以及如何尽量多的复用逻辑代码.于是就有了此文章,之前的博客也写过,不过由于主机商跑路,宝贵的资源也就没了,说多了都是泪~ 这里按模块化发展的历史回溯的时间 ...

  2. 前端模块化小总结—commonJs,AMD,CMD, ES6 的Module

    随着前端快速发展,需要使用javascript处理越来越多的事情,不在局限页面的交互,项目的需求越来越多,更多的逻辑需要在前端完成,这时需要一种新的模式 --模块化编程 模块化的理解:模块化是一种处理 ...

  3. linux 各种发行版及包管理器的关系

    linux 各种发行版及包管理器的关系 Linux发行版列表 基于Kpkg(Debian 系) Debian GNU / Linux 及其派生发行版使用deb软件包格式,并使用dpkg及其前端作为包管 ...

  4. vue教程3-01 路由、组件、bower包管理器使用

    vue教程3-01 路由.组件.包管理器 以下操作前提是 已经安装好node.js npm bower-> (前端)包管理器 下载: npm install bower -g 验证: bower ...

  5. Node.js 包管理器 NPM 讲解

    包管理器又称软件包管理系统,它是在电脑中自动安装.配制.卸载和升级软件包的工具组合,在各种系统软件和应用软件的安装管理中均有广泛应用.对于我们业务开发也很受益,相同的东西不必重复去造轮子. 每个工具或 ...

  6. 前端模块化——彻底搞懂AMD、CMD、ESM和CommonJS

    我们知道,在NodeJS之前,由于没有过于复杂的开发场景,前端是不存在模块化的,后端才有模块化.NodeJS诞生之后,它使用CommonJS的模块化规范.从此,js模块化开始快速发展. 模块化的开发方 ...

  7. Bower => 前端开发也有包管理器

    摘要: 一直以来npm,pip等各种包管理器好像都和前端开发没什么太大关系,当然因为nodejs的原因可能感觉npm会亲切一些,不过终归不是针对客户端的包管理工作,所以Bower的出现确实让人眼前一亮 ...

  8. 前端开发bower包管理器

    Bower 是 twitter 推出的一款包管理工具,基于nodejs的模块化思想,他可以很好的帮助你帮你解决js的依赖管理,比如jquery angular bootstrap 等等. 可以很方便的 ...

  9. 怎么在项目中使用前端包管理器bower和构建工具gulp

    下面以WeUI(微信官方网页开发样式库)介绍一下,怎么把WeUi引入到自己的项目中,我的开发环境Visual Studio 2012,当然了Visual Studio 2015对此已有了更好的支持(h ...

随机推荐

  1. Html5代码片段收集

    HTML5 启动模板 当启动一个新的项目的时候,你需要一个启动模板.这里是一个简洁干净的模板,可以作为 HTML5 项目的基础. <!DOCTYPE html> <html> ...

  2. 转:IDEA 与 eclipse 的部分区别!

    Idea 与 Eclipse 快捷键的区别,上为Eclipse的快捷键,下为Idea的快捷键查找类名CTRL + SHIFT + RCTRL + N 查找JAR包中的类CTRL + SHIFT + T ...

  3. ubuntu - 14.04,安装rpm程序!!

    一,安装rpm转deb的工具“alien”:在软件中心里面输入“alien”,看是否已经安装,如果没有安装则直接安装. 二,把rpm转换为deb:在shell里输入“sudo alien --scri ...

  4. [Oracle入门级]知识概况

    oracle各个版本间的主要技术更新 oracle 增加数据库创建和存储对象 oracle 8i 整体性能提升 oracle9i 实施应用集群 oracle 10g 支持网格计算 oracle 11g ...

  5. 基本css拼图形

    关闭按钮: <em class="close"></em> .close { width: 16px; height: 16px; text-align: ...

  6. SP18637 LAWRENCE - Lawrence of Arabia

    \(\color{#0066ff}{ 题目描述 }\) 给定一个长度为n的序列,至多将序列分成m+1段,每段序列都有权值,权值为序列内两个数两两相乘之和.求序列权值和最小为多少? \(\color{# ...

  7. P2597 [ZJOI2012]灾难

    \(\color{#0066ff}{ 题目描述 }\) 阿米巴是小强的好朋友. 阿米巴和小强在草原上捉蚂蚱.小强突然想,如果蚂蚱被他们捉灭绝了,那么吃蚂蚱的小鸟就会饿死,而捕食小鸟的猛禽也会跟着灭绝, ...

  8. 树链剖分【洛谷P1505】 [国家集训队]旅游

    P1505 [国家集训队]旅游 题目描述 Ray 乐忠于旅游,这次他来到了T 城.T 城是一个水上城市,一共有 N 个景点,有些景点之间会用一座桥连接.为了方便游客到达每个景点但又为了节约成本,T 城 ...

  9. luogu1900 自我数

    分享一个非正解的做法 本题解内存最低(\(\le1\rm MiB\)) 但是不开O2会tle 思路:每个数字仅会更新出1个新的数字,而且这个新数字比旧数字最多也就大70多.所以这里还是利用" ...

  10. ArcGIS api for javascript-图层控制(图层树)

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...