详解require.js配置路径的用法和css的引入


Posted in Javascript onSeptember 06, 2017

前端开发在近一两年发展的非常快,JavaScript作为主流的开发语言得到了前所未有的热捧。大量的前端框架出现了,这些框架都在尝试着解决一 些前端开发中的共性问题,但是实现又不尽相同。通常一般的前端加载js文件都是这样 :

<script type="text/javascript" src="js/js1.js"></script>
<script type="text/javascript" src="js/js2.js"></script>
<script type="text/javascript" src="js/js3.js"></script>
<script type="text/javascript" src="js/js4.js"></script>

但是当一个项目特别大的时候  引入的js文件就特别多,这样看起来不雅观,并且不高效,当js文件多而大的时候,网页下载就会出现超时,导致网站响应超时,直接500,所以一个神奇的

js框架(js工具包)就出现了:require.js。

require.js主要解决两个问题:

1、实现js的异步加载,避免js太多加载响应时间太多导致网站超时,

2、管理模块之间的依赖性,便于编写与维护。

好了步入今天的正题,写一个require.js用法的案例,供大家参考一下:

假设我们的项目有一个这样的资源目录:

详解require.js配置路径的用法和css的引入

第一步在index.html中引入已经下载好的require.js

然后我们新建一个config.js来写相应的加在配置:

然后打开config.js里面写入代码如下:

require.config({
  baseUrl:'/data/points/',//配置基目录
  urlArgs:'v='+(new Date()).getTime(),//清楚缓存
  paths:{
    'css': 'libs/js/css.min',
    'jquery': 'libs/js/jquery-1.11.1.min',
    'vur': 'libs/js/vue.min',
    'amazeui': 'libs/js/amazeui.min',
    'color': 'libs/js/color.min'
  },
  shim:{
    'amazeui':{
      deps: ['jquery','css!libs/css/amazeui.min','css!style/common','css!style/footer'],
    },
    'color':{
      deps:['css!libs/css/color.min']
    }
  }

});

其中加入css应该用模块的依赖性 也就是deps

deps:['css!libs/css/color.min'] 这里会优先加在css这个模块名下的文件(libs/js/css.min.js) 然后一个 "!"后面紧接着在基目录下加在libs/css/color.min.css

其中css.min.js这个是一个依赖模块js,这里面是写了一个加载css文件的方法,

具体css.min.js

define(
  function () {
  if (typeof window == "undefined")return {
    load: function (n, r, load) {
      load()
    }
  };
  var head = document.getElementsByTagName("head")[0];
  var engine = window.navigator.userAgent.match(/Trident\/([^ ;]*)|AppleWebKit\/([^ ;]*)|Opera\/([^ ;]*)|rv\:([^ ;]*)(.*?)Gecko\/([^ ;]*)|MSIE\s([^ ;]*)/) || 0;
  var useImportLoad = false;
  var useOnload = true;
  if (engine[1] || engine[7])useImportLoad = parseInt(engine[1]) < 6 || parseInt(engine[7]) <= 9; else if (engine[2])useOnload = false; else if (engine[4])useImportLoad = parseInt(engine[4]) < 18;
  var cssAPI = {};
  cssAPI.pluginBuilder = "./css-builder";
  var curStyle;
  var createStyle = function () {
    curStyle = document.createElement("style");
    head.appendChild(curStyle)
  };
  var importLoad = function (url, callback) {
    createStyle();
    var curSheet = curStyle.styleSheet || curStyle.sheet;
    if (curSheet && curSheet.addImport) {
      curSheet.addImport(url);
      curStyle.onload = callback
    } else {
      curStyle.textContent = '@import "' + url + '";';
      var loadInterval = setInterval(function () {
        try {
          curStyle.sheet.cssRules;
          clearInterval(loadInterval);
          callback()
        } catch (e) {
        }
      }, 10)
    }
  };
  var linkLoad = function (url, callback) {
    var link = document.createElement("link");
    link.type = "text/css";
    link.rel = "stylesheet";
    if (useOnload)link.onload = function () {
      link.onload = function () {
      };
      setTimeout(callback, 7)
    }; else var loadInterval = setInterval(function () {
      for (var i = 0; i < document.styleSheets.length; i++) {
        var sheet = document.styleSheets[i];
        if (sheet.href == link.href) {
          clearInterval(loadInterval);
          return callback()
        }
      }
    }, 10);
    link.href = url;
    head.appendChild(link)
  };
  cssAPI.normalize = function (name, normalize) {
    if (name.substr(name.length - 4, 4) == ".css")name = name.substr(0, name.length - 4);
    return normalize(name)
  };
  cssAPI.load = function (cssId, req, load, config) {
    (useImportLoad ? importLoad : linkLoad)(req.toUrl(cssId + ".css"), load)
  };
  return cssAPI
}
);

现在好了浏览器打开index.html发现没有把我们需要额外加在的加在进来,这个是为是么呢?好了,这里的话记得要在index.html的head下<script type="javascript/text" src="config.js"></script>后面调用require.js中的方法require,也就是加上这一句

<script type="javascript/text' >require['color']</script>//标识调用配置中的color模块

再次访问index.html好了完美出现我们想要的了。

如图:

详解require.js配置路径的用法和css的引入 

 注意

index.html中引入的顺序不能打乱

<script type="text/javascript" src="config.js"></script>
  
<script type="text/javascript" src="require.js"></script>
  
<script type="text/javascript">require(['color']);</script>

require.config()接受一个配置对象,这个对象除了有前面说过的paths属性之外,还有一个shim属性,专门用来配置不兼容的模块。具体来说,每个模块要定义(1)exports值(输出的变量名),表明这个模块外部调用时的名称;(2)deps数组,表明该模块的依赖性。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jquery ajax执行后台方法
Mar 18 Javascript
jquery制作居中遮罩层效果分享
Feb 21 Javascript
js中数组排序sort方法的原理分析
Nov 20 Javascript
浅谈javascript中的instanceof和typeof
Feb 27 Javascript
javascript弹性运动效果简单实现方法
Jan 08 Javascript
iOS和Android用同一个二维码实现跳转下载链接的方法
Sep 28 Javascript
jQuery模拟实现天猫购物车动画效果实例代码
May 25 jQuery
微信小程序 自定义消息提示框
Aug 06 Javascript
vue页面使用阿里oss上传功能的实例(一)
Aug 09 Javascript
Element-ui中元素滚动时el-option超出元素区域的问题
May 30 Javascript
基于VSCode调试网页JavaScript代码过程详解
Jul 20 Javascript
Javascript节流函数throttle和防抖函数debounce
Dec 03 Javascript
js canvas实现简单的图像扩散效果
Jun 28 #Javascript
vue 2.0项目中如何引入element-ui详解
Sep 06 #Javascript
jQuery实现的弹幕效果完整实例
Sep 06 #jQuery
JavaScrip数组删除特定元素的几种方法总结
Sep 06 #Javascript
jQuery实现的文字逐行向上间歇滚动效果示例
Sep 06 #jQuery
JavaScript学习笔记之函数记忆
Sep 06 #Javascript
node.js实现的装饰者模式示例
Sep 06 #Javascript
You might like
生成卡号php代码
2008/04/09 PHP
php 团购折扣计算公式
2011/11/24 PHP
逆序二维数组插入一元素的php代码
2012/06/08 PHP
PHP常用开发函数解析之数组篇[未完结]
2012/07/30 PHP
PHP实现的交通银行网银在线支付接口ECSHOP插件和使用例子
2014/05/10 PHP
php文件缓存方法总结
2016/03/16 PHP
php cookie用户登录的详解及实例代码
2017/01/03 PHP
php通过各种函数判断0和空
2020/07/04 PHP
js关闭子窗体刷新父窗体实现方法
2012/12/04 Javascript
Javascript基础知识(一)核心基础语法与事件模型
2014/09/29 Javascript
JavaScript判断前缀、后缀是否是空格的方法
2015/04/15 Javascript
跨域资源共享 CORS 详解
2016/04/26 Javascript
jQuery插件编写步骤详解
2016/06/03 Javascript
javascript 数组的定义和数组的长度
2016/06/07 Javascript
js编写选项卡效果
2017/05/23 Javascript
详解React 在服务端渲染的实现
2017/11/16 Javascript
微信小程序录音实现功能并上传(使用node解析接收)
2020/02/26 Javascript
JQuery Ajax如何实现注册检测用户名
2020/09/25 jQuery
[04:40]2016国际邀请赛中国区预选赛全程TOP10镜头集锦
2016/07/01 DOTA
Python-基础-入门 简介
2014/08/09 Python
在Python dataframe中出生日期转化为年龄的实现方法
2018/10/20 Python
浅谈python str.format与制表符\t关于中文对齐的细节问题
2019/01/14 Python
python3 pygame实现接小球游戏
2019/05/14 Python
如何通过Python3和ssl实现加密通信功能
2020/05/09 Python
html5 canvas绘制矩形和圆形的实例代码
2016/06/16 HTML / CSS
Linux上比较文件的命令都有哪些
2012/02/24 面试题
合作协议书
2014/04/23 职场文书
工作疏忽、懈怠的检讨书
2014/09/11 职场文书
一份文言文检讨书
2014/09/13 职场文书
法人代表身份证明书及授权委托书
2014/09/16 职场文书
临时用工协议书范本
2014/10/29 职场文书
先进教师个人总结
2015/02/11 职场文书
故意杀人罪辩护词
2015/05/21 职场文书
新人入职感言
2015/07/31 职场文书
教师个人工作总结范文2015
2015/10/14 职场文书
JavaScript严格模式不支持八进制的问题讲解
2021/11/07 Javascript