快速学会使用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的一些基本技巧,感谢阅读。

转载于:https://www.cnblogs.com/liuyongjia/p/7536653.html

快速学会require的使用相关推荐

  1. UI设计培训之:5个小技巧快速学会PS抠图

    一听到PS抠图,我们大家心里是不是产生了退却心理,害怕它过于复杂的操作. 那么现在有一种简单方法教给大家,如何在10分钟内快速学会ps抠图. 而你所需要准备的就是给自己10分钟的尝试时间. 你没有尝试 ...

  2. 零基础自学python教程-零基础5个月快速学会Python的秘诀

    点击蓝字"python教程"关注我们哟! 零基础该怎么快速学习Python呢?如何用5个月快速学会Python? 1 这里主要讲一下python基础与爬虫 个人认为可以分为两步走: ...

  3. 前端小白也能快速学会的博客园博客美化全攻略

    前端小白也能快速学会的博客园博客美化全攻略 A呦V,博客园er的自我修养是什么?第一条,别只顾收藏和偷师呀,记得点"推荐"或关注本人喔~ 美化方法论简介 一般而言,需要选一个默认的 ...

  4. 深入体验JavaWeb开发内幕——简述JSP中的自定义标签叫你快速学会

    转载自   深入体验JavaWeb开发内幕--简述JSP中的自定义标签叫你快速学会 自定义标签,顾名思义,就是自己定义的标签.那么我们为什么要自己定义一些标签呢? 我们知道,如果要在JSP中获取数据我 ...

  5. 新手编程:程序员 5 种编程入门方法,快速学会一门编程语言!

    程序员要精通一门语言,还是要掌握多门语言? 对于这个问题,公说公有理,婆说婆有理. 技术更新太快,精通一门编程语言已经实属不易,又怎么好意思说精通多门语言呢? 不过呢,当你精通一门语言同时,涉猎一下其 ...

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

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

  7. 如何快速掌握计算机知识,怎样快速学会电脑 学电脑的5种方法推荐

    电脑已成为人们日常办公生活娱乐必不可少的工具,现在每个人都了解点电脑知识,都要会点电脑的基本应用,那么如果对于一个电脑新手来说,怎样快速学会电脑呢,下面小编就给大家介绍下学会电脑的5种方法吧. 怎样快 ...

  8. 学习速写的方法有哪些?如何快速学会速写?

    本文由"学美术上美术集网校"原创,图片素材来自网络,仅供学习分享 学习速写的方法有哪些?如何快速学会速写?很多初学绘画者,包括有些已经进行过一些素描训练的学画青少年想画速写,总感到 ...

  9. python程序设计心得体会感想-如何快速学会Python

    如何快速学会Python 发布时间:2020-02-04 一.什么是Python Python是一种计算机程序设计语言.是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),随着版 ...

最新文章

  1. 传智168期JavaEE struts2杜宏 day 29~day31笔记(2017年2月4日23:14:00)
  2. 元宇宙深度报告,共177页!
  3. ICLR 2019论文接收结果揭晓:24篇oral论文有没有你?
  4. 手撕FSG2.0壳(有坑点)
  5. 对一个简单汇编程序分析
  6. MACAPP中引入ffmpeg库完成具体功能
  7. MongoDB 通过 Java 代码 CRUD 文档
  8. java判断运算符_java运算符,判断符(了解)
  9. VISIO各种图标超全(IT行业专用网络及硬件)_工业控制网络的现状
  10. 转换大师swf转html,iPixSoft SWF to HTML5 Converter
  11. android蓝牙动态权限,Android蓝牙权限
  12. 数电笔记之无关项化简逻辑函数
  13. 不收费的数据恢复软件好用吗?数据丢失这样恢复
  14. 平衡二叉树、B树、B+树,B*树的区别与联系
  15. 关于为什么频宽越大传输越快 、 频率越高传输距离越短
  16. 十强队伍来了!网易云信 Innovation 2022 开发者大赛决赛名单公布
  17. 南华大学计算机科学学院,万亚平
  18. mac删除自带的abc输入法
  19. 「雷锋前线」那昕出任CEO,“什么值得买”会变吗
  20. 虚拟机中linux磁盘空间不足

热门文章

  1. 数学建模matlab实验报告,数学建模实验.doc
  2. 简述中断处理的6个步骤_基于SCDM软件的CFD前处理工作5个步骤
  3. 计算机趣味知识竞赛策划书,计算机趣味知识竞赛活动策划书.doc
  4. html table 向上滚动,决策报表的表格自动向上滚动问题
  5. c ++中哈希表如何访问_C / C ++中的哈希表–完整的实现
  6. linux与unix的区别_Linux与Unix
  7. java多线程示例_Java线程示例
  8. linux的/proc文件_Linux中“ / proc”文件系统指南
  9. awk的基本使用方法
  10. 1002. 三角形 (