快速学会使用require.js

1.get start

先到官网下载requirejs到本地,官方同时提供Node版本r.js,我们只使用requirejs即可。

接下来在页面上写入

    <scrpit src="/js/require.js"></scrpit>

即可。

那么业务js呢?我们注意到,官方文档提到了data-main这个属性

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

这个data-main所对应的js,是入口js,requirejs会首先加载这个js,然后才会根据依赖异步加载其他的依赖模块。

在main.js里,我们可以编写业务代码,在编写的时候,要注意处理好依赖。

例如,main.js依赖于工具类tools.js,在main.js中,就应该这么写

require(['js/tools'], function (Tools) { // Tools对应于数组中的tools,多个参数一一对应
// 编写业务逻辑
})

这就是一个简单的require的使用了。

2.处理依赖

在上一节,我们注意到main.js里面require引入了tools,如果我们依赖许多js,那岂不是每个都要写对应的路径和全名,岂不是很麻烦。

针对这个问题,requirejs提供了一个config函数,用来自定义加载行为。

require.config(
path:{
'zepto': 'js/zepto.min',
'tools': 'js/tools'
}
)

只需要在main.js最前方加入这个配置函数即可。我们就能简化部分代码。

但是我还是觉得不够好,这样的话,如果我有多个页面,我每次都要写好几次重复config函数,很多余,复制粘贴超过三次,我们就该考虑复用的问题。

当然,requirejs的作者也想到了这个问题。实际上,即使是在一个spa项目中,也不能真的只有一个html。所以,我们可以编写一个config.js来存放我们对require的配置。

// config.js
var require = {
baseUrl: './js',
waitSeconds: 0,
paths: {
'zepto': 'zepto.min',
'tools': 'tools'
},
shim: {
zepto: {exports: '$'},
common:{exports: 'common', deps: ['zepto']}
}
};

上面列出了一些配置项,可以在官网找到对应内容。简单列几个常见的配置项:

baseUrl: the root path to use for all module lookups.

即根目录,所有的模块都从baseUrl目录下去查找js。

paths: path mappings for module names not found directly under baseUrl.

无需多言,需要注意,path中配置的模块,都是基于baseUrl的。

shim: Configure the dependencies, exports, and custom initialization for older, traditional "browser globals" scripts that do not use define() to declare the dependencies and set a module value.

shim是我们在面对一些不支持amd写法的老模块时需要进行配置的地方。比如zepto。

waitSeconds: The number of seconds to wait before giving up on loading a script. Setting it to 0 disables the timeout. The default is 7 seconds.

waitSecond用来设置寻找js的时长,默认7s,正常情况下,我们会设置为0,因为一般来说,如果一切正常,不会出现找不到的情况。

callback: A function to execute after deps have been loaded. Useful when require is defined as a config object before require.js is loaded, and you want to specify a function to require after the configuration's deps array has been loaded.

callback函数会在全部依赖加载完毕后调用,可以用来做一些初始化的操作。

我在这里不能一一举例,详细查看官方配置项页面

在cogfig.js编写完毕以后,就可以在页面中导入它了。

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

此处需要注意的是,一旦配置了configjs中baseUrl,那么data-main中的main.js也要根据baseUrl去找。

3.编写我们的依赖模块

在开发中,我们也需要编写自己的依赖模块,例如tools工具集,这节介绍如何编写符合AMD规范的模块。

下面是一个例子:

define(['zepto'], function($){
    function sayHi(){
      $('title').text = 'Hi';
    }
    return {
      sayHi : sayHi
    };
  });

如果无依赖,则第一个参数不传或传空数组即可。

4.实际开发中遇到的问题

事实上,在实际开发中,我们会需要把所有的静态资源(img,js,css)放到cdn上。这时,在打包的时候,就需要修改baseUrl,如果配置了的话。

因为html页面放置在服务器上,可能地址为 https://www.xx.com/index.html 。在html中的js引入应该为

<script src="//static.xx.com/xxxx/js/config.js"></script>

此时config.js放置在cdn上,如果baseUrl依然为./js,很显然,就会链到当前页面所在目录下js文件夹,也就是 https://www.xx.com/js/ ,明显不对。

所以在打cdn包的时候,要注意修改baseUrl为cdn地址

在cdn打包时,还有一个需要注意的地方,我们会加入md5来防止版本冲突。例如tools.js打包完成后,会变成tool.3jf321.js。这时,config.js中的path路径也需要做修改,链到加了md5的js上

一般来说,我们都是用grunt和gulp等工具做打包。

加入md5的时候,一般会在rev目录下生成一个mainfest.json,存放了一一对应的对象,我们只需要将这个对象遍历修改即可。

我使用gulp来打包,基本写法如下,仅供参考:

var cdn_url = '//static.xxx.com/xxx/';
gulp.task('rev', function() {
return gulp.src(['rev/**/*.json', 'dist/*.html'])
.pipe(revCollector({
replaceReved: true,
dirReplacements: {
'css': function(manifest_value) {
return cdn_url + 'css/' + manifest_value;
},
'js': function(manifest_value) {
return cdn_url + 'js/' + manifest_value;
},
}
}))
.pipe(gulp.dest('cdn'));
});

以上就是在使用require.js的一些基本技巧,感谢阅读。

快速学会require的使用的更多相关文章

  1. 快速学会搭建SVN服务器

    原文:快速学会搭建SVN服务器 SVN是一个版本控制工具,常用于我们软件开发项目中,用来管理我们团队共同使用的代码,文档等历史版本的管理,保持代码的更新,避免混乱. 需要工具: svn安装程序:免费下 ...

  2. Android 工程师如何快速学会web前段

    Android 工程师如何快速学会web前段 今天主要聊一下本人最近在学习web前段的感受,最近html5是越来越火了,前段时间公司做了一个项目然后让我们“android”的程序猿过去帮忙把客户 端框 ...

  3. 教你轻松快速学会用Calibre TXT转MOBI

    教你轻松快速学会TXT转为有目录的MOBI###授人以渔,lllll5500制作### 需使用软件按先后顺序如下:一.排版助手 官网http://www.gidot.net/typesetter/二. ...

  4. 【轻松学编程】如何快速学会一门高级编程语言,以python为例

    python文章目录 关注公众号"轻松学编程"了解更多. 写在前面:如何快速(比如在一个月内)学会一门高级编程语言? 现在想学一门编程语言并不难,网上有很多资料,包括书籍.博客.视 ...

  5. 如何快速学会git

    相信大多数入门者都对git的原理比较恍惚,今天我们来告诉大家如何快速学会git命令. 1.git init 这个命令会在当前目录里创建一个.git目录,也就是初始化本地仓库.git. 如图先创建文件夹 ...

  6. FMDB 二次封装工具类,让你快速学会封装,集成数据库

    来源:StrivEver 链接:http://www.jianshu.com/p/4c77aee0b41c 上个版本为了增加用户体验,部分页面集成了离线缓存数据功能,于是就在项目里使用了数据库管理离线 ...

  7. 通过对比语法差异,让会JAVA的你快速学会Kotlin的开源宝藏项目

    今天有个小伙伴来问TJ君,说自己JAVA用的贼溜,想再学习下Kotlin,问TJ君上手难不难? 怎么说呢?其实TJ君一直觉得语言这方面,是触类旁通.一通百通的,既然JAVA已经贼溜了,想必学其他的语言 ...

  8. 怎样快速学会ZBrush 中的移动笔刷的运用

    本篇视频教程,进入ZBrush®最精彩章节,雕刻前我们需要认识的雕刻工具-笔刷.zbrush自带了多种笔刷供大家选择和使用,掌握和用好这些笔刷将让我们的雕刻工作更加自由.本课的内容将主要向大家介绍最基 ...

  9. 一张图让你快速学会UML(聚合、组合、依赖、继承、接口、类)

    有朋友反映,一上来直接讲设计模式就算理解了,也不知道如何画出类图,那么我们就通过一张图,来图解如何应用UML正确表示类与类之间的关系. 这张图完整讲述了鸟类的生存. 首先是类:在UML中,我们用分成三 ...

随机推荐

  1. 一周中的后两天 笔记(网路基础 Python基础)

    网络基础 (统一的协议) 一,  计算机之间通过物理介质(网络设备)连接在一起 二,  计算机之间基于网络协议通信   tcp/ip五层   应用层: 传输层:tcp/udp协议 找到对应的软件 一个 ...

  2. Hacking JWT(JSON Web Token)

    0x01 JWT工作流程 JSON Web Token(JWT)是一个非常轻巧的规范. 这个规范允许我们使用JWT在用户和服务器之间传递安全可靠的信息. JWT常被用于前后端分离,可以和Restful ...

  3. nvm版本控制以及node.js

    nvm node.js版本控制工具 下载 nvm 包 地址:https://github.com/coreybutler/nvm-windows/releases 我们选择第一个:nvm-noinst ...

  4. RGB转MIPI CSI芯片方案TC358746XBG

    型号:TC358746XBG功能:RGB888/666/565与MIPI CSI 互转通信方式:IIC/SPI分辨率:720p电源:3.3/1.2V封装形式:BGA72深圳有现货库存,价格有优势,样片 ...

  5. [转]Java7中的ForkJoin并发框架初探(上)——需求背景和设计原理

    详见: http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp83 这篇我们来简要了解一下JavaSE7中提供的一个新特性 -- For ...

  6. Linux-mknod命令(9)

    mknod命令用于创建字符设备文件和块设备文件 (ls /dev -l 结果显示b开头和c开头的,即标识了块设备和字符设备.) 为了管理设备,所以设备中都有两个设备号:  主设备号:为了区分不同类型的 ...

  7. java基于注解的redis自动缓存实现

    目的: 对于查询接口所得到的数据,只需要配置注解,就自动存入redis!此后一定时间内,都从redis中获取数据,从而减轻数据库压力. 示例: package com.itliucheng.biz; ...

  8. JS跨域请求 JSONP B/S全代码

    Ajax直接请求普通文件存在跨域无权限访问的问题,甭管你是静态页面.动态网页.web服务.WCF,只要是跨域请求,一律不准:Web页面上调用js文件时则不受是否跨域的影响(不仅如此,我们还发现凡是拥有 ...

  9. 历上最强的音乐播放器(jetA…

    原文地址:历上最强的音乐播放器(jetAudio-8.0.5.320-Plus-VX-完全汉化版)下载作者:盖世天星 历上最强的音乐播放器(jetAudio-8.0.5.320-Plus-VX-完全汉 ...

  10. 【★】SPF(Dijkstra)算法完美教程