requirejs和seajs使用感受
这几天看了下前端模块化的知识,主要是requirejs和seajs相关的知识,还未看es6的模块化知识。
由于目前项目组内的开始推广使用vue,并且开始简单的封装组件,但发现组件js的使用方式依然是原先的script标签引用方式,同时组件的template文件需作为字符串变量在组件js文件内封装,无法使用html标签的验证、补全、语法高亮等功能,此外多个小型组件组合成大型组件时,需要在每个使用到大型组件的html页面中把所有的小型组件js引入,代码重复并且容易出现遗漏情况。于是想到了前端模块化相关的知识,将组件封装为模块,使用前端模块化相关的工具,解决模块之间的依赖关系,只需引入单一的js文件即可,方便维护管理。
AMD和requirejs
AMD是Asynchronous Module Definition,异步模块定义。
AMD规范定义了一个define函数。AMD规范 https://github.com/amdjs/amdjs-api/wiki/AMD
define( id?, dependencies?, factory );
第一个参数,id 为字符串类型,为可选参数,为模块的标识。如果此标识不存在,模块的标识则为此脚本的文件名称,必要时还包含此文件的路径。
第二个参数,dependencies为字符串数组,为当前模块依赖的其他模块标识。
第三个参数,factory为function,其参数对应依赖模块,是一个需要进行实例化的函数或者一个对象。
requirejs是一个基于javascript语言的文件和模块加载器。
其实用非常简单,官方资料也比较充分。模块体现在requirejs中,可如下所示:定义了一个名称为myModule的模块,它依赖于dep1和dep2两个模块,此模块返回了一个对象,此对象包含一个名称为name的属性。
define('myModule',['dep1','dep2'],function(dep1,dep2){
return {
name:'hello world'
}})
模块可以使用依赖模块的文件路径,此时依赖模块的相对路径是相对当前模块所在的路径。
define('myModule',['./modules/dep1','dep2'],function(dep1,dep2){
return {
name:'hello world'
}})
在requirejs中,可以直接将vue作为一个模块引入使用。
使用插件:当存在模板文件时,依赖的模块名称前面增加"text!"即表示此依赖为文本文件,这样即可将vue的模板文件异步加载进来,使用“css!”,css文件也可这样引用。
requirejs使用感受
requirejs可以说是一种先声明再使用的方式,所有依赖的模块加载完毕后,再执行此模块的内容。
唯一害怕的是,添加依赖模块时,需要同时修改两个地方,还要保证映射关系不错,当依赖的模块太多时,害怕。好在暂时没想到需要依赖很多模块的模块。
当然也有另一种方式使用依赖的模块,require是使用模块的函数定义,不用担心模块会被重复加载。仍需再define中定义依赖的模块,只不过在需要时使用require获取即可。
define(['a'], function () {
var a = require('a');
});
CMD和seajs
玉伯写的seajs,使用方式如下所示
define(function(require,exports,module){
//此处如果需要某XX模块,可以引入
var xx=require('XX');
});
这样,代码在运行时遇到require时,才会同步加载所需的模块。
模块内容定义,需使用exports和module实现,可以同requirejs一样,返回对象即可。
通过使用seajs-text插件,可以将文本文件作为模块加载进来,完成vue组件的代码模板分开编写的目的。
seajs使用感受
抛除seajs和requirejs中的define的不同,二者在使用上没有什么区别。requirejs可以require一个依赖模块,只不过需先定义下。
seajs是执行时发现需要依赖模块再异步加载,requirejs异步加载定义依赖模块后再执行。
http://huangxuan.me/js-module-7day/这个PPT讲解清晰明了
requirejs和seajs使用感受的更多相关文章
- RequireJS与SeaJS模块化加载示例
web应用越变的庞大,模块化越显得重要,尤其Nodejs的流行,Javascript不限用于浏览器,还用于后台或其他场景时,没有Class,没有 Package的Javascript语言变得难以管理, ...
- RequireJS和seaJS的区别与联系
RequireJS和seaJS的区别与联系联系:都是模块加载器,倡导模块化开发理念,核心价值是让 JavaScript 的模块化开发变得简单自然. RequireJS(除了是 ...
- 从Java的角度理解前端框架,nodejs,reactjs,angularjs,requirejs,seajs
[前端神秘的面纱] 对后端开发来说,前端是神秘的, 眼花缭乱的技术,繁多的框架, 如果你还停留在前端等于只用jquery做开发,那么你out了, 本文从Java的角度简述下目前前端流行的一些框架. 水 ...
- LABjs、RequireJS、SeaJS 哪个最好用?为什么?
感谢玉伯在知乎的奉献,下面全文转载:http://www.zhihu.com/question/20342350/answer/14828786 LABjs 的核心是 LAB(Loading and ...
- LABjs、RequireJS、SeaJS 哪个最好用?为什么?- 玉伯的回答
LABjs 的核心是 LAB(Loading and Blocking):Loading 指异步并行加载,Blocking 是指同步等待执行.LABjs 通过优雅的语法(script 和 wait)实 ...
- RequireJS 与 SeaJS 的异同
相同之处 RequireJS 和 SeaJS 都是模块加载器,倡导的是一种模块化开发理念,核心价值是让 JavaScript 的模块化开发变得更简单自然. 不同之处 两者的区别如下: 定位有差异.Re ...
- 模块化以及requirejs和seajs
我们用模块化的思想进行网页的编写是为了更好的管理我们的项目 模块与模块之间是独立存在的,每个模块可以独立的完成一个子功能. 模块化所涉及的规范commonjs,AMD,CMD,UMD 其中的commo ...
- RequireJS 和 SeaJS
RequireJS SeaJS CMD规范 CommonJS的规范: 根据CommonJS规范,一个单独的文件就是一个模块.加载模块使用require方法,该方法读取一个文件并执行,最后返回文件内部的 ...
- RequireJs 与 SeaJs的相同之处与区别
相同之处: RequireJS 和 Sea.js 都是模块加载器,倡导模块化开发理念,核心价值是让 JavaScript 的模块化开发变得简单自然. 不同之处: 定位有差异.RequireJS 想成为 ...
随机推荐
- 1.css介绍
CSS介绍 我们为什么需要CSS? 使用css的目的就是让网页具有美观一致的页面,另外一个最重要的原因是内容与格式分离 在没有CSS之前,我们想要修改HTML元素的样式需要为每个HTML元素单独定义样 ...
- 深入了解java虚拟机(JVM) 第二章 内存区域---栈空间
一.栈的含义 用于描述方法执行的动态内存模型,简单来说就是代码中的方法模块.主要用于局部变量表.栈的大小在编译器中就已经分配了空间,在进入一个方法时,这个方法需要栈帧分配多少内存是固定的,运行期间是不 ...
- js中apply详解
学习http://www.cnblogs.com/delin/archive/2010/06/17/1759695.html 1.对象的继承,一般的做法是复制:Object.extend protot ...
- [Objective-C语言教程]函数(11)
函数是一组一起执行任务的语句. 每个Objective-C程序都有一个C函数,也就是main()函数,所有最简单的程序都可以定义为函数. 可将代码划分为单独的函数.如何在不同的函数之间划分代码取决于程 ...
- uC/OS-II 函数之内存管理相关函数
上文主要介绍了邮箱管理相关的函数,本文介绍内存管理相关的函数:OSMemCreate()内存块创建函数,OSMemGet()函数,OSMemPut()函数,OSMemQuery()函数.以前用过的uC ...
- ghj1222被坑记录[不持续更新]
考试注意事项:link1 link2 (密码:wangle) 调不出来bug,可以先透彻一会儿或者是上个厕所或者坐一会别的题(间隔至少20min),然后通读代码 -1. 考试先读题,读题之后搞出一个做 ...
- 【UVA11324】 The Largest Clique (Tarjan+topsort/记忆化搜索)
UVA11324 The Largest Clique 题目描述 给你一张有向图 \(G\),求一个结点数最大的结点集,使得该结点集中的任意两个结点 \(u\) 和 \(v\) 满足:要么 \(u\) ...
- Alluxio学习
介绍 Alluxio(之前名为Tachyon)是世界上第一个以内存为中心的虚拟的分布式存储系统.它统一了数据访问的方式,为上层计算框架和底层存储系统构建了桥梁.应用只需要连接Alluxio即可访问存储 ...
- 为什么sudo执行命令还是会提示权限不够
安装openstack 的过程中需要执行以下命令,虽然使用了sudo,但是依然提示权限不够 $ sudo echo "deb http://ubuntu-cloud.archive.cano ...
- SQL语句之数据库操作
SQL语句系列 1.SQL语句之行操作 2.SQL语句之表操作 3.SQL语句之数据库操作 4.SQL语句之用户管理 占坑,带写……