当前前端模块化横行,自然诞生了很多优秀的模块加载器.RequireJS就是其中之一,前端er自然不得不去学习下.
RequireJS 简介
RequireJS 是一个JavaScript模块加载器。适合在浏览器中使用,但它也可以用在其他脚本环境(Node),使用RequireJS加载模块化脚本将提高代码的加载速度和质量。
RequireJS兼容性很好
IE6+以上都可以,其他浏览器更不在话下.
- 下载RequireJS(直接去官网下).
- 项目需求:利用RequireJS往index.html页面加载它需要的js(jquery.js和a.js)
- 创建一个测试目录
简单介绍下目录结构:
- js:存放js文件,/js/lib存放第三方库需要的js文件(如jQuery,RequireJS等),/js/app存放我们应用程序的js文件(a.js).
- index.html:你的页面(测试页面)
- config_a.js:入口文件(类似webpack里面的入口文件),你可以理解为requireJS在index.html这个页面的配制文件.
- require.js:我们下载的requireJS文件
我们传统的加载js方式:
缺点:
- 加载JS并解析会导致浏览器对网页的渲染停滞,尤其加载的js很多时候,浏览器失去响应的时间会很长.
- 如果js文件之间存在依赖(比如加载Bootstrap),那么你的js文件加载顺序还不能错,这对项目的维护不友好.
RequireJS模块加载方式:
优点:
- 对JS文件进行异步加载,避免浏览器渲染的空白期.
- RequireJS会自行解决模块之间依赖关系,方便项目的维护.
–
- 回到上一步,在你的index.html底部里面,引入RequireJS.
|
|
- 编辑index.html
|
|
- 编辑config_a.js
|
|
注解:
- require.js 在加载的时候会检察data-main 属性
- RequireJS以一个相对于baseUrl(基目录)的地址来加载所有的代码。baseUrl一般设置到与data-main属性相一致的目录,baseUrl亦可通过requirejs.config手动设置
- (推荐指定)如果没有显式指定config及data-main,则默认的baseUrl为包含RequireJS的那个HTML页面的所属目录
- RequireJS默认假定所有的依赖资源都是js脚本,因此无需在module ID上再加”.js”后缀,RequireJS在进行module ID到path的解析时会自动补上后缀
- path:映射各个模块的加载路径
- require()用法
|
|
- 编辑 a.js
|
|
注解: AMD规范中的模块定义
|
|
- 打开浏览器查看效果
- OK
- RequireJS模块加载器原理:
1.路径匹配原则
require( [‘moduleID1’,’moduleID2’ ] , callback),这些,moduleID与paths里面的路径匹配(baseUrl+path);
2.createElement(‘script’) & appendChild
指知道请求的js路径后,动态生成