前端模块化 、包管理器、AMD、 CMD、 require.js 、sea.js
问题由来,为什么要前端模块化管理:
假设我们有个组件名为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的更多相关文章
- 前端模块化之CommonJS,ES6,AMD,CMD
最近在搞跨平台解决方案,讨论关于模块划分的问题以及如何尽量多的复用逻辑代码.于是就有了此文章,之前的博客也写过,不过由于主机商跑路,宝贵的资源也就没了,说多了都是泪~ 这里按模块化发展的历史回溯的时间 ...
- 前端模块化小总结—commonJs,AMD,CMD, ES6 的Module
随着前端快速发展,需要使用javascript处理越来越多的事情,不在局限页面的交互,项目的需求越来越多,更多的逻辑需要在前端完成,这时需要一种新的模式 --模块化编程 模块化的理解:模块化是一种处理 ...
- linux 各种发行版及包管理器的关系
linux 各种发行版及包管理器的关系 Linux发行版列表 基于Kpkg(Debian 系) Debian GNU / Linux 及其派生发行版使用deb软件包格式,并使用dpkg及其前端作为包管 ...
- vue教程3-01 路由、组件、bower包管理器使用
vue教程3-01 路由.组件.包管理器 以下操作前提是 已经安装好node.js npm bower-> (前端)包管理器 下载: npm install bower -g 验证: bower ...
- Node.js 包管理器 NPM 讲解
包管理器又称软件包管理系统,它是在电脑中自动安装.配制.卸载和升级软件包的工具组合,在各种系统软件和应用软件的安装管理中均有广泛应用.对于我们业务开发也很受益,相同的东西不必重复去造轮子. 每个工具或 ...
- 前端模块化——彻底搞懂AMD、CMD、ESM和CommonJS
我们知道,在NodeJS之前,由于没有过于复杂的开发场景,前端是不存在模块化的,后端才有模块化.NodeJS诞生之后,它使用CommonJS的模块化规范.从此,js模块化开始快速发展. 模块化的开发方 ...
- Bower => 前端开发也有包管理器
摘要: 一直以来npm,pip等各种包管理器好像都和前端开发没什么太大关系,当然因为nodejs的原因可能感觉npm会亲切一些,不过终归不是针对客户端的包管理工作,所以Bower的出现确实让人眼前一亮 ...
- 前端开发bower包管理器
Bower 是 twitter 推出的一款包管理工具,基于nodejs的模块化思想,他可以很好的帮助你帮你解决js的依赖管理,比如jquery angular bootstrap 等等. 可以很方便的 ...
- 怎么在项目中使用前端包管理器bower和构建工具gulp
下面以WeUI(微信官方网页开发样式库)介绍一下,怎么把WeUi引入到自己的项目中,我的开发环境Visual Studio 2012,当然了Visual Studio 2015对此已有了更好的支持(h ...
随机推荐
- 通过pip3安装virtualenvwrapper
pip3 install virtualenvwrapper 配置virtualenvwrapper创建虚拟环境的目录和指定python3版本 环境编辑当前用户配置变量 mkdir ~/.virtua ...
- laravel安装[转https://laravelacademy.org/post/9528.html]
Laravel 框架对PHP版本和扩展有一定要求,不过这些要求 Laravel Homestead 都已经满足了,不过如果你没有使用 Homestead 的话(那真是一件很遗憾的事情),有必要了解下这 ...
- git 增量打包
git diff f506693 ccc253c3 --name-only | xargs tar -czvf update.tar.gz
- 洛谷P3628 [APIO2010]特别行动队(斜率优化)
传送门 先写出转移方程$$dp[i]=max\{dp[j]+a*(sum[i]-sum[j])^2+b*(sum[i]-sum[j])+c\}$$ 假设$j$比$k$更优,则有$$dp[j]+a*(s ...
- c# 中virtual与abstract
在C#的学习中,容易混淆virtual方法和abstract方法的使用,现在来讨论一下二者的区别.二者都牵涉到在派生类中与override的配合使用. 一.Virtual方法(虚方法) virtual ...
- 通过IDEA及hadoop平台实现k-means聚类算法
由于实验室任务方向变更,本文不再更新~ 有段时间没有操作过,发现自己忘记一些步骤了,这篇文章会记录相关步骤,并随时进行补充修改. 1 基础步骤,即相关环境部署及数据准备 数据文件类型为.csv文件,e ...
- Codeforces Round #549 div2 1143-B Nirvana 题解
Kurt reaches nirvana when he finds the product of all the digits of some positive integer. Greater v ...
- Jenkins的Pipeline脚本在美团餐饮SaaS中的实践(转)
一.背景 在日常开发中,我们经常会有发布需求,而且还会遇到各种环境,比如:线上环境(Online),模拟环境(Staging),开发环境(Dev)等.最简单的就是手动构建.上传服务器,但这种方式太过于 ...
- postgresql 如何设置主键自增
法一: CREATE TABLE customers ( customerid SERIAL primary key , companyname character varying, contactn ...
- jQuery form插件的使用--ajaxForm()和ajaxSubmit()
转载:https://blog.csdn.net/qq_38602656/article/details/78668924