requireJS的基本使用

一、总结

一句话总结:

requireJS是js端模块化开发,主要是实现js的异步加载,和管理模块之间的依赖关系,便于代码的编写和维护

1、页面加载的js文件过多的缺点是什么?

|||-begin

  1. 为了提高代码的复用度,开发人员会按照功能把大量的js代码分成若干文件,这样在多个页面就可以使用同一个文件了

|||-end

1、网站加载js时会停止其它资源加载,并停止页面渲染(就是我们常说的白屏现象)
2、加载过多的js文件可能造成浏览器假死(浏览器一直在加载,不能进行页面操作)
3、假如文件有依赖关系,就是使用B.js需要先加载A.js,那我们还要小心翼翼的去引入js,不过这么多文件,鬼理得清依赖关系啊

2、网站的功能日益强大,js文件越来越多是必然的的事情,如何解决?

模块化开发:比如requireJS

3、js模块化 开发规范 分类?

1、服务器端(CommonJS):如Node.js
2、客户端(AMD、CMD):如requireJS 和 seaJS

4、什么是requireJS?

1、RequireJS是一个【JavaScript文件或者模块的加载器】。它可以提高JavaScript文件的加载速度,避免不必要的堵塞。
2、requireJS采用【异步方式加载模块】,可以简单理解为【加载js文件的一个工具】
3、requireJS是客户端模块化开发的一种规范,用于解决加载过多js文件导致浏览器白屏及假死及js文件引入的依赖关系的。

5、requireJS的作用?

1、实现js的异步加载
2、管理模块之间的依赖关系,便于代码的编写和维护

6、require.config方法中的baseUrl、paths、shim分别代表什么?

属性1:baseUrl:指定统一的路径
属性2:paths:每个模块的路径
属性3:shim:定义非AMD
  1. require.config({
  2. baseUrl: '../resource/app',
  3. paths: {
  4. 'hd': 'hd',
  5. 'css': '../lib/css.min',
  6. 'jquery': '../lib/jquery.min',
  7. 'angular': '../lib/angular.min',
  8. 'bootstrap': '../lib/bootstrap.min',
  9. },
  10. shim: {
  11. 'hd': {
  12. // exports: 'modal',
  13. init: function () {
  14. return {
  15. modal: modal,
  16. success: success,
  17. }
  18. }
  19. },
  20. //houdunren.com
  21. 'bootstrap': {
  22. 'deps': ['jquery', 'css!../css/bootstrap.min.css', 'css!../css/font-awesome.min.css']
  23. }
  24. }
  25. });

二、requireJS的基本使用

参考或转自:【模块化开发】------requireJS的基本使用------【凡尘】
http://www.mamicode.com/info-detail-2285125.html

前言

为了提高代码的复用度,开发人员会按照功能把大量的js代码分成若干文件,这样在多个页面就可以使用同一个文件了。,下面是某个网站的js引用情况

虽然代码的复用度提升了,但是缺点也体现了出来

缺点:

  1、网站加载js时会停止其它资源加载,并停止页面渲染(就是我们常说的白屏现象)
     2、加载过多的js文件可能造成浏览器假死(浏览器一直在加载,不能进行页面操作)
     3、假如文件有依赖关系,就是使用B.js需要先加载A.js,那我们还要小心翼翼的去引入js,不过这么多文件,鬼理得清依赖关系啊
 
 
额 。。。容许我懵逼片刻,那怎么办呢,网站的功能日益强大,js文件越来越多是必然的的事情,于是出现了模块化开发
 
 
 
模块化开发
 
001、模块化分类
 
目前js模块化 开发规范 分为两种
     1、服务器端(CommonJS)  如Node.js
 
     2、客户端(AMD、CMD)  如:requireJS 和 seaJS
 
 
 
002、什么是requireJS
  1、RequireJS是一个JavaScript文件或者模块的加载器。它可以提高JavaScript文件的加载速度,避免不必要的堵塞。
 
  2、requireJS采用异步方式加载模块,可以简单理解为加载js文件的一个工具
 
  3、requireJS是客户端模块化开发的一种规范,用于解决加载过多js文件导致浏览器白屏及假死及js文件引入的依赖关系的。
 
  4、requireJS的作用:
       1、实现js的异步加载
       2、管理模块之间的依赖关系,便于代码的编写和维护
 
 
003、require的基本使用
 
  第一步:加载requirejs
  

  1. <script src="require.js"></script>

 

 第二步:异步加载require.js

  1. <script src="require.js" defer async="true"></script>
  2.  
  3. //async属性表明这个文件需要异步加载, IE不支持该属性,只支持defer所以把defer也写上

  

  第三步:加载入口文件

  1. <script src="require.js" data-main="js/index" defer async="true"/><script>
  2.  
  3. data-main:用于加载入口文件(当require加载完毕后,需要引进主模块js文件)

  

  第四步:使用require.config方法配置各个模块所加载的路径

  1. require.config方法:
  2.  
  3.   参数是一个对象:对象中有3个属性
          属性1baseUrl:指定统一的路径
  4.  
  5.       属性2paths:每个模块的路径
          
          属性3shim:定义非AMD
  6.  
  7. require.config({
  8. //指定根路径js文件夹
  9. baseUrl:"js",
  10. //每个文件路径
  11. paths:{
  12. "jquery":"lib/jquery-1.11.3",
  13. "layer":"plug/layer",
  14. "swiper":"plug/swiper.min",
  15. "banner":"list/banner",
  16. "alert":"list/alert"
  17. },
  18. //非AMD文件的模块
  19. shim:{
  20.  
  21. }
  22. })

  第五步:AMD规范定义模块

AMD规范:
     因为require是采用AMD规范,因为必须要按照AMD的规定来编写。也就是所有的模块必须采用define()函数来定义
define函数有2个参数:
          第一个参数是需要依赖的模块,如果不依赖就不用书写 必须是一个数组
 
          第二参数是书写的模块内容
  1.  
  2. //以下定义了一个swiper的轮播图
    define(["jquery","swiper"],function(){
  3. function init(){
  4. new Swiper (‘.swiper-container‘, {
  5. direction: horizontal‘,
  6. loop: true,
  7. autoplay : 3000,
  8. speed:300,
  9.  
  10. pagination: ‘.swiper-pagination‘,
  11. // 如果需要前进后退按钮
  12. nextButton: ‘.swiper-button-next‘,
  13. prevButton: ‘.swiper-button-prev‘,
  14.  
  15. })
  16. }
  17. return {
  18. init:init
  19. }
  20. })

  第六步:入口的核心文件

require:接受2个参数
     1、第一个参数是数组,表示依赖的模块
     2、第二个参数是回调函数
  1.  
  2. require(["config"],function(){
  3. require(["jquery","layer","swiper","banner","alert"],function($,layer,swiper,banner,alert){
  4. banner.init()
  5. alert.init()
  6. })
  7. })
第一步加载配置文件
 
第二步加载所需要的模块
  1.  

  第七步:如果遇到非AMD规范的模块

  1. shim:{
  2. 模块名:{
          deps:[""],//所依赖的模块
          exports:模块名//导出模块的名称
        }
  3. }
 

requireJS的基本使用的更多相关文章

  1. bootstrap + requireJS+ director+ knockout + web API = 一个时髦的单页程序

    也许单页程序(Single Page Application)并不是什么时髦的玩意,像Gmail在很早之前就已经在使用这种模式.通常的说法是它通过避免页面刷新大大提高了网站的响应性,像操作桌面应用程序 ...

  2. 实现一个类 RequireJS 的模块加载器 (二)

    2017 新年好 ! 新年第一天对我来说真是悲伤 ,早上兴冲冲地爬起来背着书包跑去实验室,结果今天大家都休息 .回宿舍的时候发现书包湿了,原来盒子装的牛奶盖子松了,泼了一书包,电脑风扇口和USB口都进 ...

  3. 使用RequireJS并实现一个自己的模块加载器 (一)

    RequireJS & SeaJS 在 模块化开发 开发以前,都是直接在页面上引入 script 标签来引用脚本的,当项目变得比较复杂,就会带来很多问题. JS项目中的依赖只有通过引入JS的顺 ...

  4. 使用gulp解决RequireJS项目前端缓存问题(二)

    1.前言 这一节,我们主要解决在上一节<使用gulp解决RequireJSs项目前端缓存问题(一)>末尾提到的几个问题: 对通过require-config.js引入的js文件修改后,没有 ...

  5. AngularJs2与AMD加载器(dojo requirejs)集成

    现在是西太平洋时间凌晨,这个问题我鼓捣了一天,都没时间学英语了,英语太差,相信第二天我也看不懂了,直接看结果就行. 核心原理就是require在AngularJs2编译过程中是关键字,而在浏览器里面运 ...

  6. angularjs集成requirejs

    其实说成使用requirejs加载angularjs应用会更贴切一些 <body> <span ng-controller="homeController"> ...

  7. 使用gulp解决RequireJS项目前端缓存问题(一)

    1.前言 前端缓存一直是个令人头疼的问题,你有可能见过下面博客园首页的资源文件链接: 有没有发现文件名后面有一串不规则的东东,没错,这就是运用缓存机制,我们今天研究的就是这种东西. 先堵为快,猛戳链接 ...

  8. CommonJS, AMD 和 RequireJS之间的关系(转载)

    先说说CommonJS CommonJS - 大家是不是觉得JavaScript仅仅是一个客户端的编译语言,其实JavaScript设计之初不仅仅是针对客户端设计的语言.后来只是由于Web的迅速流行, ...

  9. RequireJS与SeaJS模块化加载示例

    web应用越变的庞大,模块化越显得重要,尤其Nodejs的流行,Javascript不限用于浏览器,还用于后台或其他场景时,没有Class,没有 Package的Javascript语言变得难以管理, ...

  10. 【requireJS源码学习01】了解整个requireJS的结构

    前言 现在工作中基本离不开requireJS这种模块管理工具了,之前一直在用,但是对其原理不甚熟悉,整两天我们来试着学习其源码,而后在探寻其背后的AMD思想吧 于是今天的目标是熟悉requireJS整 ...

随机推荐

  1. [LeetCode] 737. Sentence Similarity II 句子相似度 II

    Given two sentences words1, words2 (each represented as an array of strings), and a list of similar ...

  2. ifcopenshell在VS2015下的编译

    源起 今天使用 IfcOpenShell的IfcConvert ,因为是开源的所以就想自己编译下,编译过程中遇到不少问题,因此记录下来 什么是IfcOpenShell? IfcOpenShell是一个 ...

  3. 【并行计算-CUDA开发】【视频开发】ffmpeg Nvidia硬件加速总结

    2017年5月25日 0. 概述 FFmpeg可通过Nvidia的GPU进行加速,其中高层接口是通过Video Codec SDK来实现GPU资源的调用.Video Codec SDK包含完整的的高性 ...

  4. obj.GetType().GetCustomAttributes

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  5. 【idea】【sonarlint】指定文件夹扫描

    选择文件夹右键->Analyze->Analyze with SonarLint

  6. JS系列:编程语言

    1.编程语言 html+css标记语言 js:轻量级的交互语言->全栈编程语言 - 面向对象: + C++ + JAVA + PHP + C# (.net doc) + JS - 面向过程 + ...

  7. Listener学习

    监听器Listener用于监听web应用中某些对象.信息的创建.销毁.增加,修改,删除等动作的发生,然后作出相应的响应处理.当范围对象的状态发生变化的时候,服务器自动调用监听器对象中的方法.常用于统计 ...

  8. CF723D 【Lakes in Berland】

    题目链接 题解 CF723D [Lakes in Berland] 首先将边界的水用bfs处理掉 再将中间的每一个湖泊处理出来,存入一个结构体内,结构体里记录湖泊大小和开始点 将湖泊排序从小往大填满, ...

  9. C++ Primer 第五版示例gcc源码

    官方资源,原封不动的.对应于GCC,因此文件名是以此命名的. 门牌号: https://github.com/ZeroPhong/Learning-Resource/blob/master/GCC_4 ...

  10. 在PHP中使用UUID扩展的函数

    环境:CentOS Linux release 7.7.1908 (Core)PHP 7.3.11UUID Extention 1.0.4 感觉上PHP对UUID的支持似乎不是很上心,PECL中的UU ...