详解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 相关文章推荐
用showModalDialog弹出页面后,提交表单总是弹出一个新窗口
Jul 18 Javascript
jQuery Dialog 弹出层对话框插件
Aug 09 Javascript
最好用的省市二级联动 原生js实现你值得拥有
Sep 22 Javascript
JavaScript四种调用模式和this示例介绍
Jan 02 Javascript
js判断设备是否为PC并调整图片大小
Feb 12 Javascript
jQuery中size()方法用法实例
Dec 27 Javascript
JS实现5秒钟自动封锁div层的方法
Feb 20 Javascript
JavaScript通过setTimeout实时显示当前时间的方法
Apr 16 Javascript
巧用jQuery选择器提高写表单效率的方法
Aug 19 Javascript
Vue实现本地购物车功能
Dec 05 Javascript
基于vue.js实现购物车
Jan 15 Javascript
解决vue cli4升级sass-loader(v8)后报错问题
Jul 30 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数组实例详解
2016/06/26 PHP
php实现基于pdo的事务处理方法示例
2017/07/21 PHP
JS实现带圆弧背景渐变效果的导航菜单代码
2015/10/13 Javascript
详谈JavaScript的闭包及应用
2017/01/17 Javascript
详解vue父子模版嵌套案例
2017/03/04 Javascript
微信小程序实现带刻度尺滑块功能
2017/03/29 Javascript
js实现华丽的九九乘法表效果
2017/03/29 Javascript
H5上传本地图片并预览功能
2017/05/08 Javascript
vue在手机中通过本机IP地址访问webApp的方法
2018/08/15 Javascript
简单的React SSR服务器渲染实现
2018/12/11 Javascript
微信小程序位置授权处理方法
2019/06/13 Javascript
vue实现淘宝购物车功能
2020/04/20 Javascript
基于javascript canvas实现五子棋游戏
2020/07/08 Javascript
JavaScript原生数组函数实例汇总
2020/10/14 Javascript
python抓取豆瓣图片并自动保存示例学习
2014/01/10 Python
web.py中调用文件夹内模板的方法
2014/08/26 Python
python中的set实现不重复的排序原理
2018/01/24 Python
cProfile Python性能分析工具使用详解
2019/07/22 Python
python科学计算之scipy——optimize用法
2019/11/25 Python
Python实现捕获异常发生的文件和具体行数
2020/04/25 Python
记一次django内存异常排查及解决方法
2020/08/07 Python
python中time、datetime模块的使用
2020/12/14 Python
纯css3使用vw和vh实现自适应的方法
2018/02/09 HTML / CSS
世界领先的艺术图书出版社:TASCHEN
2018/07/23 全球购物
美国轮胎网站:Priority Tire
2018/11/28 全球购物
Chupi官网:在爱尔兰手工制作的订婚、结婚戒指和精美珠宝
2020/09/28 全球购物
C语言编程练习
2012/04/02 面试题
系统管理员的职责包括那些?管理的对象是什么?
2013/01/18 面试题
如何填写个人简历自我评价
2013/12/10 职场文书
学习党的群众路线教育实践活动心得体会
2014/03/01 职场文书
村班子对照检查材料
2014/08/18 职场文书
四风对照检查材料思想汇报
2014/09/20 职场文书
2015年民主评议党员工作总结
2015/05/19 职场文书
公司中层管理培训心得体会
2016/01/11 职场文书
血轮眼轮回眼特效 html+css
2021/03/31 HTML / CSS
win10更新失败无限重启解决方法
2022/04/19 数码科技