模块化开发(requireJS)
模块化
在前端使用模块化开发,可以将代码根据功能实施模块的划分,每个模块功能(职责)单一,在需要更改对应的功能的时候,只需要对指定的模块进行修改,其他模块不受任何影响。
为什么要进行前端模块化?
- 达到公共模块的复用
- 可以很好的解决全局变量污染的问题
- 可以很好的解决各个功能之间的依赖关系
如何实现前端模块化开发
JavaScript本身不支持模块化开发,但是可以通过一些手段来实现。
CommonJS是一个规范,用来规定模块化开发的标准。
CommonJS由于一系列的限制,在前端开发当中,并不能很好的被实现。
Nodejs中对于CommonJS这个规范有很好的实现。
CommonJS虽然不能再前端开发中很好进行实现,但是后面有人在CommonJS的基础上做了其他的改变。
AMD Async Module Define (require.js) 也是一个规范,在CommonJS的基础上产生的 //依赖前置
CMD Common Module Define (sea.js) [玉伯] 也是一个规范,在CommonJS的基础上产生的 //依赖就近 as lazy as possible
逗乐:AMD没有明显的BUG,但是CMD明显没有BUG
如何实现模块 (require.js)
requirejs本身就是一个js文件,这个文件实现了AMD规范,所以可以帮助我们在前端开发中实现模块化!
模块的定义
//如果当前模块没有任何依赖项
define(function(){
});
//如果一个模块要引用另外一个模块,就将模块的名称放在第一个参数的数组中
define(["模块","模块"], function(形参, 形参){
//模块和形参一一对应,形参就表示每个对应的模块的返回值
//可以通过当前函数的形参,接收其他模块的返回值!
//定义模块的时候,可以有返回值,也可以没有返回
//如果有返回值,就可以将返回值交给调用该模块的模块使用
})
模块的使用
require函数可以用来引用模块,require的第一个参数为数组,里面写所有要引用的模块的名称
//只引用模块,不执行其他代码
require([]);
//引用模块,并且执行一些操作!
require([], function(){
//可以通过当前函数的形参,接收其他模块的返回值!
})
入口文件
在引用requirejs的script标签中,可以指定一个入口文件(data-main),当require.js文件加载完成之后,会自动执行,这个入口文件中的代码!
模块的路径
- 默认情况下,模块的路径是以调用模块的页面的目录为基础的!
- 当使用入口文件的时候,模块的路径是以入口文件的目录作为基础的
- 如果使用了require.config配置了baseUrl,就一配置的baseUrl为基础查找文件
自定义模块路径查找
require.config({
baseUrl: "/"
});
使用require 加载传统的js
例如加载bootstrap, 因为bootstrap是基于jQuery,所以要手动的设置依赖项
在require.config({
//在shim属性中,通过deps属性,为bootstrap添加依赖项
shim: {
bootstrap:{
deps: []
}
}
})
jquery支持模块化,jquery.cookie也支持模块化!
使用requirejs加载非模块化的内容
如果加载的非模块化的内容有依赖项,就要在config中,在shim属性中,通过deps属性,为这个非模块化的内容添加依赖项
如果加载的非模块化的内容要返回内容给我们使用,就要在config中,在shim属性中,通过exports属性,来设置返回的内容,这个内容可以是非模块化的文件中任意一个变量名(字符串)
匿名模块 和 具名模块
//匿名模块的定义
define([], function(){
})
//具名模块的定义
define("模块名", [], function(){
})
//具名模块中的模块名,必须和paths中设置的路径的名称一致,才能够访问,不然会出现路径错误
graph LR
A-->B
graph LR
A-->B
sequenceDiagram
A->>B: How are you?
B->>A: Great!
gantt
dateFormat YYYY-MM-DD
section S1
T1: 2014-01-01, 9d
section S2
T2: 2014-01-11, 9d
section S3
T3: 2014-01-02, 9d
gantt
dateFormat YYYY-MM-DD
section S1
T1: 2014-01-01, 9d
section S2
T2: 2014-01-11, 9d
section S3
T3: 2014-01-02, 9d
模块化开发(requireJS)的更多相关文章
- 模块化开发RequireJS之shim配置
一.shim requirejs使用AMD规范开发,若开发过程中加载非AMD规范js,需要使用requirejs的shim进行配置. shim配置语法为: //配置文件 requirejs.confi ...
- 模块化开发RequireJS之路径解析
1.requirejs遵循AMD规范,将需要的都加载好(前置加载).注:cmd是就近加载. define(['jQuery','dialog'],function($,d){ // 业务逻辑 }) ( ...
- Angular 结合RequireJs实现模块化开发
angular的指令是模块化很好的一个体现,下面我将只使用指令(不用控制器),结合requirejs,实现模块化开发. 模块化关系图:
- Javascript模块化开发,使用模块化脚本加载工具RequireJS,提高你代码的速度和质量。
随着前端JavaScript代码越来越重,如何组织JavaScript代码变得非常重要,好的组织方式,可以让别人和自己很好的理解代码,也便于维护和测试.模块化是一种非常好的代码组织方式,本文试着对Ja ...
- 在Html中使用Requirejs进行模块化开发
在前端模块化的时候,不仅仅是js需要进行模块化管理,html有时候也需要模块化管理.这里就介绍下如何通过requirejs,实现html代码的模块化开发. 如何使用requirejs加载html Re ...
- [工具配置]使用requirejs模块化开发多页面一个入口js的使用方式
描述 知道requirejs的都知道,每一个页面需要进行模块化开发都得有一个入口js文件进行模块配置.但是现在就有一个很尴尬的问题,如果页面很多的话,那么这个data-main对应的入口文件就会很多. ...
- 【模块化开发】------requireJS的基本使用------【巷子】
前言 为了提高代码的复用度,开发人员会按照功能把大量的js代码分成若干文件,这样在多个页面就可以使用同一个文件了.,下面是某个网站的js引用情况 虽然代码的复用度提升了,但是缺点也体现了出来 缺点: ...
- 使用requirejs模块化开发多页面一个入口js的使用方式
描述 知道requirejs的都知道,每一个页面需要进行模块化开发都得有一个入口js文件进行模块配置.但是现在就有一个很尴尬的问题,如果页面很多的话,那么这个data-main对应的入口文件就会很多. ...
- JS模块化开发:使用SeaJs高效构建页面
一.扯淡部分 很久很久以前,也就是刚开始接触前端的那会儿,脑袋里压根没有什么架构.重构.性能这些概念,天真地以为前端===好看的页面,甚至把js都划分到除了用来写一些美美的特效别无它用的阴暗角落里,就 ...
随机推荐
- LINUX内核及应用程序移植工作
1. 添加工作用户 [root@localhost ~]#useradd -G root -g root -d/home/arm arm 2. 建立工作目录 [arm@localhost arm]$m ...
- md详解和rd详解:一次性创建多个目录和多级子目录
md 命令: 官方解释: E:\ABC>md /? 创建目录. MKDIR [drive:]path MD [drive:]path 如果命令扩展被启用,MKDIR 会如下改变: 如果需要,MK ...
- MVC升级后报"当前上下文中不存在ViewBag"错的解决方法
- bzoj1294题解
[题意分析] 给定一张网格图,每个网格可能是普通点.特殊点或障碍点,每个特殊点有一个分值.要求选定一条只经过普通点的可重复回路,使回路内部的特殊点分值和最大. [算法分析] 引理:射线法 对于平面内任 ...
- 最小表示法——牛客多校第七场A
脑瘫一样暴力,贪心找最小表示的串,判一个串是否是最小表示法时也是暴力地判.. 但是想不通复杂度是怎么算的.. #include<bits/stdc++.h> using namespace ...
- NX二次开发-UFUN CSYS坐标系转换UF_CSYS_map_point
1 NX9+VS2012 2 3 #include <uf.h> 4 #include <uf_curve.h> 5 #include <uf_csys.h> 6 ...
- NX二次开发-UFUN高亮显示对象UF_DISP_set_highlight
NX11+VS2013 #include <uf.h> #include <uf_modl.h> #include <uf_disp.h> UF_initializ ...
- servlet和servlet-mapping的作用
转载:https://www.jianshu.com/p/6dadc489969a 某个工程的 web.xml 文件片段: 执行顺序 访问顺序为1—>2—>3—>4,其中2和3的 ...
- unittest(1)
一.unittest核心概念 1.unittest四个核心概念 unittest四个核心概念包括:TestCase.TestSuite.TestRunner.Test Fixture TestCase ...
- mysql安装总结
#mysql安装# 安装工具:yum -y install gcc-c++ ncurses cmake make ncurses-devel # 拷贝配置文件到指定目录:rm -rf /etc/my. ...