• 获取&使用require.js

下载最新版的Require.JS。
下载之后,把它放在项目的脚本文件夹下,比如 js 文件夹下,项目结构看上去应该是:

要充分使用Require.JS,将html 文件中所有的内联脚本都移除,只留下一
句话:

<!DOCTYPE html>

<html>
<head>
<title>My Sample Project</title>
<!-- data-main 属性告诉 require.js 在 require.js 加载之后加载 js/main.js -->
<script data-main="js/main" src="js/require.js"></script>
</head>
<body>
<h1>My Sample Project</h1>
</body>
</html>

在 main.js 中,可以通过 require() 加载依赖的脚本,这样不用在 html 中显示声明。
main.js 相当于是一个入口点:

require(["helper/util"], function (util) {
// 当 scripts/helper/util.js 加载完毕,会执行这个回调函数
// 如果 util.js 也声明了依赖的文件(模块),那么这个函数会等到那些依赖的文件(模块)
加载完毕后才调用
//TODO
});

  • 加载js 文件

通过刚才的介绍,可以看出来 RequireJS 采用了不同于传统 <script> 标签的加载方式,
传统的 <script> 标签方式一般都会有下面的代码:

<body>
<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript" src="js/jquery.plugin.xx.js"></script>
<script type="text/javascript" src="js/a1.js"></script>
<script type="text/javascript" src="js/a2.js"></script>
<script type="text/javascript" src="js/a3.js"></script>
……
</body>

而require.js采用了模块ID 加载方式

<script data-main="js/main" src="js/require.js"></script>

RequireJS 查找脚本的路径,主要是通过 baseUrl,在 data-main 中,声明了 baseUrl
的路径,在这句代码里也就是 js 文件夹;如果不声明 data-main,则 baseUrl 默认指向
这个 html 页面所在的文件夹。当然,也可以通过配置来声明 baseUrl,下文会详述。
注意,data-main 中声明的模块会被异步加载,也就意味着如果页面后面通过 <script>
加载多个脚本,这些脚本不一定在 data-main 中声明的模块加载之后才加载;或者后面
的js 代码如果有对 data-main 中声明的模块的依赖,则有可能会出现错误。
RequireJS 会假定所有依赖项默认都是脚本,所以书写依赖时可以省略 “.js” 后缀,
RequireJS 会自动加上这个后缀。RequireJS 会自动把模块ID 翻译成一个路径
(path),我们也可以在配置中声明多个路径(paths),通过 baseUrl + paths,可以用
很少的代码找到相应的 js 文件,比起 <script> 标签要优雅简洁很多。
一般来说,通过 baseUrl + paths 就可以找到js 文件,不过有时候,可能会有例外,一旦
RequireJS 发现模块 ID 中包含如下的字符,那么它就不按照 baseUrl + paths 的方式来
寻找这个模块的js 文件了,而是采用 URL 的方式:
o 如果 ID 以 “.js” 结尾
o 如果 ID 以 “/” 开头
o 如果 ID 以 “http:” 或者 “https:” 开头
一般来说,最好使用 baseUrl + paths 的方式来声明模块ID,这样做会有更多的灵活性。
同样的,我们在组织js 代码文件的时候,尽量避免使用很深的路径,而最好把js 文件都放
置在 baseUrl 下面,最好不要超过两层的深度,下面就是一个很好的例子:
 www/
 index.html
 js/
 app/
 sub.js
 lib/
 jquery.js
 canvas.js
 app.js
在 index.html 中:

<script data-main="js/app.js" src="js/require.js"></script>

在 app.js 中:

requirejs.config({
//默认从 js/lib 中加载模块
baseUrl : 'js/lib',
//如果模块ID 以app 开头,则会在 js/app 目录下寻找
//不过要注意千万不要加上 ".js",否则paths 的规则就会失效
paths : {
app : '../app'
}
});
requirejs(['jquery', 'canvas', 'app/sub'],
function ($, canvas, sub) {
//jQuery, canvas 和 app/sub 模块都加载完毕后,会执行这个函数
//TODO

});

使用RequireJS 时,建议像 jQuery 这样带有版本号的库,用单独的文件来标识版本号,
在文件命名中把版本号去掉。

  • 定义模块

RequireJS 要求一个js 文件只定义一个模块。不过这样的话,每加载一个模块,就会产生
一个HTTP 请求,RequireJS 提供了一个优化工具,在最后生产环境中,可以打包所有模
块到一个文件中。
定义模块可以使用 define() 方法,define() 有三个参数,可以参考前文中的介绍。
定义一个只有键值对,没有任何依赖的模块:

JS模块化编程(四)--require应用的更多相关文章

  1. javascript模块化编程库require.js的用法

    随着javascript的兴起,越来越多的公司开始将JS模块化,以增加开发的效率和减少重复编写代码的.更是为了能更加容易的维护日后的代码,因为现在的随着人们对交互效果的越来越强烈的需求,我们的JS代码 ...

  2. require.js实现js模块化编程(一)

    1.认识require.js: 官方文档:http://requirejs.org/RequireJS是一个非常小巧的JavaScript模块载入框架,是AMD规范最好的实现者之一.最新版本的Requ ...

  3. require.js实现js模块化编程(二):RequireJS Optimizer

    require.js实现js模块化编程(二):RequireJS Optimizer 这一节,我们主要学习一下require.js所提供的一个优化工具r.js的用法. 1.认识RequireJS Op ...

  4. 初步理解require.js模块化编程

    初步理解require.js模块化编程 一.Javascript模块化编程 目前,通行的Javascript模块规范共有两种:CommonJS和AMD. 1.commonjs 2009年,美国程序员R ...

  5. [转]js模块化编程之彻底弄懂CommonJS和AMD/CMD!

    原文: https://www.cnblogs.com/chenguangliang/p/5856701.html ------------------------------------------ ...

  6. 从273二手车的M站点初探js模块化编程

    前言 这几天在看273M站点时被他们的页面交互方式所吸引,他们的首页是采用三次加载+分页的方式.也就说分为大分页和小分页两种交互.大分页就是通过分页按钮来操作,小分页是通过下拉(向下滑动)时异步加载数 ...

  7. Javascript模块化编程-require.js

    转自:https://www.cnblogs.com/digdeep/p/4607131.html Javascript模块化编程(一):模块的写法 随着网站逐渐变成"互联网应用程序&quo ...

  8. js模块化编程之彻底弄懂CommonJS和AMD/CMD!

    先回答我:为什么模块很重要? 答:因为有了模块,我们就可以更方便地使用别人的代码,想要什么功能,就加载什么模块.但是,这样做有一个前提,那就是大家必须以同样的方式编写模块,否则你有你的写法,我有我的写 ...

  9. 好文推荐系列-------(5)js模块化编程

    本文主要来源于阮一峰的<Javascript模块化编程>系列文章整合,原文地址:http://www.ruanyifeng.com/blog/2012/10/javascript_modu ...

随机推荐

  1. sine曲线向前运动

    using UnityEngine; using System.Collections; public class sineWork : MonoBehaviour { float verticalS ...

  2. Lua中的注释

    Lua中有两种注释:行注释和块注释.行注释以“--”开头,可以注释这一行后面的内容.块注释以“--[[”开始,以“--]]”结尾,可以注释这个范围内的整个内容:块注释可以注释多行内容.下面是一个示例: ...

  3. 【抓包分析】 charles + 网易mumu 模拟器数据包

    charles  的使用.我就不再多说了.可以参考以往文章,传送门: https://www.cnblogs.com/richerdyoung/p/8616674.html 此处主要说网易模拟器的使用 ...

  4. SharpGL学习笔记(九) OpenGL的光照模型, 术语解释

    在3D场景中,每个像素最终显示出来的颜色都是经过大量计算而得到的,其中一些计算是依赖于场景中的光照以及场景中物体对光线的反射和吸收情况. 例如,对于一个红色的物体, 在白色光(白光是红光,绿光和蓝光等 ...

  5. sencha touch 百度地图扩展(2014-6-24)(废弃 仅参考)

    扩展代码如下: Ext.define('ux.BMap', { alternateClassName: 'bMap', extend: 'Ext.Container', xtype: 'bMap', ...

  6. Unity3D Android动态反射加载程序集

    这种办法在iOS下是不让用的,只能在Android下用.用起来也很方便了. 1.先创建一个c#工程,引用到的UnityEngine.dll在Unity的安装目录里找吧 2.将编译的dll放入Unity ...

  7. Scrapy计划表

    第一步 Scrapy 一览:理解Scrapy是什么,他能帮到你什么 安装指南:在电脑上安装Scrapy Scrapy 教程:编写第一个Scrapy项目 示例:通过前人写好的Scrapy项目进行学习 基 ...

  8. 23种设计模式之适配器模式(Adapter)

    适配器模式将一个接口转换成客户希望的另一个接口,从而使接口不兼容的那些类可以一起工作.适配器模式既可以作为类结构型模式,也可以作为对象结构型模式.在类适配器模式中,通过使用一个具体类将适配者适配到目标 ...

  9. iOS8跳转到系统设置页

    版权声明:本文为博主原创文章,未经博主允许不得转载. 大家都知道,在iOS5.0时时可以跳转到系统的设置页的.但是在5.1之后就不可以了. 刚才研究了下这个问题,发现只有iOS8可以跳转到系统设置里自 ...

  10. “找女神要QQ号码”——java篇

    题目就是这样的: 给了一串数字(不是QQ号码),根据下面规则可以找出QQ号码: 首先删除第一个数,紧接着将第二个数放到这串数字的末尾,再将第三个数删除,并将第四个数放到这串数字的末尾...... 如此 ...