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

假设我们有个组件名为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. ASP.NET网页动态添加数据行

    一看到这标题<ASP.NET网页动态添加数据行>,想起来似乎有点难实现.因为网页的周期性原因,往往在PostBack之后,状态难于有所保留.但Insus.NET又想实现这样的效果,用户点击 ...

  2. PS2018学习笔记(03-18节)

    3-认识主界面 # 主界面包括: 菜单栏.选项栏.工具栏.面板.图像编辑窗口(中间)和状态栏(底部): # 界面设置: 方法1:Ctrl+k:打开界面设置; 方法2:编辑-首选项-界面 # shift ...

  3. Educational Codeforces Round 61 (Rated for Div. 2)F(区间DP,思维,枚举)

    #include<bits/stdc++.h>typedef long long ll;const int inf=0x3f3f3f3f;using namespace std;char ...

  4. C语言字符串操作

    1)字符串操作 strcpy(p, p1) 复制字符串 strncpy(p, p1, n) 复制指定长度字符串 strcat(p, p1) 附加字符串 strncat(p, p1, n) 附加指定长度 ...

  5. vue_cli安装

    一. 安装 node.js 首先需要安装node环境,可以直接到中文官网http://nodejs.cn/下载安装包. 只是这样安装的 node 是固定版本的,如果需要多版本的 node,可以使用 n ...

  6. P4841 城市规划 FFT+生成函数

    \(\color{#0066ff}{ 题目描述 }\) 刚刚解决完电力网络的问题, 阿狸又被领导的任务给难住了. 刚才说过, 阿狸的国家有n个城市, 现在国家需要在某些城市对之间建立一些贸易路线, 使 ...

  7. NOIP后省选集训前文化课划水记

    划水划了一个多月,文化课没啥长进还他妈累死了...--ghj1222 11.11(NOIP Day2) 师傅开车开得很快,晚上8:00多就到了二狱 晚上听毒瘤班主任swh讲了半节语文,我:黑人问号.j ...

  8. springdataRedis连接redis集群

    配置文件: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http:// ...

  9. 江西财经大学第一届程序设计竞赛 D

    链接:https://www.nowcoder.com/acm/contest/115/D来源:牛客网 题目描述 事情,是这样的. 有这么一天双休日的中午. 我刚把我衣服扔进了洗衣机,然后拿了个小板凳 ...

  10. git 合并某个提交commit到指定的分支上

    https://blog.csdn.net/anhenzhufeng/article/details/77962943 git checkout master git cherry-pick 62ec ...