详解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 相关文章推荐
javascript字符串拼接的效率问题
Dec 25 Javascript
jquery下checked取值问题的解决方法
Aug 09 Javascript
js和jquery设置disabled属性为true使按钮失效
Aug 07 Javascript
浅谈Sizzle的“编译原理”
Apr 14 Javascript
基于jQuery实现的仿百度首页滑动选项卡效果代码
Nov 16 Javascript
基于Node.js实现nodemailer邮件发送
Jan 26 Javascript
js正则表达式最长匹配(贪婪匹配)和最短匹配(懒惰匹配)用法分析
Dec 27 Javascript
详解用场景去理解函数柯里化(入门篇)
Apr 11 Javascript
详解微信小程序支付流程与梳理
Jul 16 Javascript
基于vue-draggable 实现三级拖动排序效果
Jan 10 Javascript
jQuery实现开关灯效果
Aug 02 jQuery
vue-cli3.0修改打包后的文件名和文件地址,打包后本地运行报错解决
Apr 06 Vue.js
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采集相关教程之一 CURL函数库
2010/02/15 PHP
9个PHP开发常用功能函数小结
2011/07/15 PHP
ThinkPHP3.1之D方法实例详解
2014/06/20 PHP
PHP中echo,print_r与var_dump区别分析
2014/09/29 PHP
php session的应用详细介绍
2017/03/22 PHP
PHP实现计算器小功能
2020/08/28 PHP
很全的显示阴历(农历)日期的js代码
2009/01/01 Javascript
Javascript面向对象设计一 工厂模式
2011/12/20 Javascript
使用js简单实现了tree树菜单
2013/11/20 Javascript
jquery1.10给新增元素绑定事件的方法
2014/03/06 Javascript
JavaScript简单修改窗口大小的方法
2015/08/03 Javascript
jquery实现在网页指定区域显示自定义右键菜单效果
2015/08/25 Javascript
基于JavaScript怎么实现让歌词滚动播放
2015/11/03 Javascript
Javascript数组中push方法用法分析
2016/10/31 Javascript
JS公共小方法之判断对象是否为domElement的实例
2016/11/25 Javascript
详解JS判断页面是在手机端还是在PC端打开的方法
2019/04/26 Javascript
JQuery事件委托原理与用法实例分析
2019/05/13 jQuery
js实现简易计算器功能
2019/10/18 Javascript
vue-cli设置publicPath小记
2020/04/14 Javascript
python使用xmlrpc实例讲解
2013/12/17 Python
Python实现过滤单个Android程序日志脚本分享
2015/01/16 Python
Python实现登录人人网并抓取新鲜事的方法
2015/05/11 Python
浅谈python for循环的巧妙运用(迭代、列表生成式)
2017/09/26 Python
使用pandas对两个dataframe进行join的实例
2018/06/08 Python
浅析python中numpy包中的argsort函数的使用
2018/08/30 Python
python3.6利用pyinstall打包py为exe的操作实例
2018/10/31 Python
使用django实现一个代码发布系统
2019/07/18 Python
Python接口测试结果集实现封装比较
2020/05/01 Python
css3.0 图形构成实例练习一
2013/03/19 HTML / CSS
手对手的教你用canvas画一个简单的海报的方法示例
2018/12/10 HTML / CSS
html5 video全屏播放/自动播放的实现示例
2020/08/06 HTML / CSS
毕业实习评语
2014/02/10 职场文书
优秀教师工作感言
2014/02/16 职场文书
卖房授权委托书样本
2014/10/05 职场文书
2015年客房服务员工作总结
2015/05/15 职场文书
python绘制箱型图
2021/04/27 Python