详解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实现回旋滚动效果
Jan 08 Javascript
JavaScript 函数参数是传值(byVal)还是传址(byRef) 分享
Jul 02 Javascript
jQuery Easyui Datagrid实现单行的上移下移及保存移动的结果
Aug 15 Javascript
fullpage.js全屏滚动插件使用实例
Sep 06 Javascript
详解Node.js access_token的获取、存储及更新
Jun 20 Javascript
详解Vue项目编译后部署在非网站根目录的解决方案
Apr 26 Javascript
在Vue 中使用Typescript的示例代码
Sep 10 Javascript
详解vscode中vue代码颜色插件
Oct 11 Javascript
小程序实现选择题选择效果
Nov 04 Javascript
vue2.0移动端滑动事件vue-touch的实例代码
Nov 27 Javascript
详解Vue.directive 自定义指令
Mar 27 Javascript
Nuxt的路由动画效果案例
Nov 06 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实现解析xml并生成sql语句的方法
2018/02/03 PHP
php 获取xml接口数据的处理方法
2018/05/31 PHP
JS自动适应的图片弹窗实例
2013/06/29 Javascript
JavaScript中操作Mysql数据库实例
2015/04/02 Javascript
基于BootStrap的Metronic框架实现页面链接收藏夹功能按钮移动收藏记录(使用Sortable进行拖动排序)
2016/08/29 Javascript
KnockoutJS 3.X API 第四章之事件event绑定
2016/10/10 Javascript
Bootstrap的基本应用要点浅析
2016/12/19 Javascript
解决jQuery ajax动态新增节点无法触发点击事件的问题
2017/05/24 jQuery
Javascript 一些需要注意的细节(必看篇)
2017/07/08 Javascript
Javascript中toFixed计算错误(依赖银行家舍入法的缺陷)解决方法
2017/08/22 Javascript
使用淘宝镜像cnpm安装Vue.js的图文教程
2018/05/17 Javascript
Vue Echarts实现可视化世界地图代码实例
2019/05/07 Javascript
前端js中的事件循环eventloop机制详解
2019/05/15 Javascript
[01:00:49]DOTA2-DPC中国联赛 正赛 Ehome vs iG BO3 第二场 1月31日
2021/03/11 DOTA
Python文件操作类操作实例详解
2014/07/11 Python
Python实现的根据文件名查找数据文件功能示例
2018/05/02 Python
Python3.7实现中控考勤机自动连接
2018/08/28 Python
win10 64bit下python NLTK安装教程
2018/09/19 Python
解决python opencv无法显示图片的问题
2018/10/28 Python
利用matplotlib实现根据实时数据动态更新图形
2019/12/13 Python
python ImageDraw类实现几何图形的绘制与文字的绘制
2020/02/26 Python
Python Flask异步发送邮件实现方法解析
2020/08/01 Python
Python Celery异步任务队列使用方法解析
2020/08/10 Python
python利用paramiko实现交换机巡检的示例
2020/09/22 Python
OpenCV利用python来实现图像的直方图均衡化
2020/10/21 Python
Python实现FTP文件定时自动下载的步骤
2020/12/19 Python
HTML5中语义化 b 和 i 标签
2008/10/17 HTML / CSS
Gap加拿大官网:Gap Canada
2017/08/24 全球购物
Osklen官方在线商店:巴西服装品牌
2019/04/25 全球购物
女性时尚网购:Chic Me
2019/07/30 全球购物
一套带答案的C++笔试题
2014/01/10 面试题
是否可以从一个static方法内部发出对非static方法的调用?
2014/08/18 面试题
关于环保的活动方案
2014/08/25 职场文书
2015年度环卫处工作总结
2015/07/24 职场文书
一篇文章带你学习Mybatis-Plus(新手入门)
2021/08/02 Java/Android
三种方式清除vue路由跳转router-link的历史记录
2022/04/10 Vue.js