zoukankan      html  css  js  c++  java
  • RequireJs触摸

      RequireJs印象中是刚参加工作接手第二个ext项目中遇到过,很可惜当时没有认真研究过,实际上一直到今天也只是停留在知道它可以做什么而已。年底了工作渐渐进入休整期,前天不经意看到博客园一大神讨论requirejs和ASP.NET MVC Bundling异同,忽然又想起了requirejs,于是决定一探究竟,下面记录这两天的(断断续续的~~你懂得)学习成果。

    1.RequireJs能做什么?

      1). 防止页面加载js时阻塞页面渲染

           2). 模块化加载js,避免出现页面多引用、依赖js问题

    2.认识RequireJs

    使用RequireJs加载模块化的js,define定义模块且模块需返回

    //DefineJs模块
    define(function(){ var DefineJs={ MyAlert:function(msg){ alert('sean '+msg) } } return DefineJs;//必须返回 })

    注:我们可以在定义模块的时候添加依赖

    //依赖jquery的模块
    define(["jquery"],function($){ var MyJs={ MyAlert:function(msg){ var opt={id:1,name:'sean',msg:'hi sean'}; $.extend(opt,{msg:'hi '+msg}) alert(opt.msg) } } return MyJs;//必须返回 })

    html页面如何使用模块js?RequireJs引用到页面时可以添加data-main属性指定模块入口main.js再此可以省略后缀,相当于main函数,async="true"是异步加载避免阻塞,defer是针对IE浏览器功能和async一样。

    <!DOCTYPE html>
    <html>
    <head>
        <title>RequireJs实践</title>
        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
        <meta http-equiv="content-type" content="text/html;charset=utf-8">
    </head>
    <body>
    
    <script src="js/require.js" data-main="js/main" defer async="true" ></script>
    </body>
    </html>

    main.js   conffig配置用到哪些模块

    //main.js
    require.config({ baseUrl:
    'js/', paths : { myfunc: 'DefineJs' //DefineJs模块 } }) require(["myfunc"],function(r){ r.MyAlert('你好') // sean 你好 })

    实际开发中我们会引用很多jquery插件而且这些插件未必就是define()模块化的,那该如何使用RequireJs呢?

    RequireJs提供shim关键字将依赖的js某个全局变量暴露出来当做模块引用

    //不符合AMD规范 UnAMD.js

    var consol=function (argument) {
      var opt={
        id:1,
        name:'sean'
      }
      $.extend(opt,{name:argument})
      console.info(opt)
    }

    main.js稍作修改

    //main.js
    require.config({ baseUrl:
    'js/', paths : {
      jquery :["http://libs.baidu.com/jquery/2.0.3/jquery"],
    myfunc: 'DefineJs'//DefineJs模块 }, shim: {//不符合AMD js UnAMD: { deps : ["jquery"], //依赖jquery exports : "consol"//输出的对象必须和相关js中的全局变量一致 封装成对象 } } }) require(["jquery",'UnAMD'],function($,con){ $(function(){ con('月明星惜');//控制台输出 对象{id:1,name:'月明星惜'} }) })

    /*===========================RequireJs简单介绍到此结束==================================*/

    注意事项:

    defing 命名模块

    仔细看jquery发现且在定义模块时是这样的 define( "jquery", [], function() { return jQuery; }); 根据上面介绍我们知道define定义模块时这个模块可以是依赖别的模块的也就是第二个参数数组,那么第一个参数是什么意思呢?其实定义模块是可以强制性定义模块名称,而且在require.config中不可以修改模块名称,所以配置时一定要注意这种已命名的模块。

    requirejs.config({
      baseUrl: '/public/js',
      paths: {
        myjquery: 'lib/jquery/jquery'//重新自定义jquery模块名称 
      }
    });
    requirejs(['myjquery'], function($) {
      //do sth      程序报错  $ is undefined
    });

     

    学无先后,达者为师
  • 相关阅读:
    【1】排行榜算法设计
    基础问答【二】
    基础问答【一】
    【1】c语言
    (五)帧同步与状态同步
    (四)c++虚函数详解
    (三)git pull报错解决方案,Your local changes to the following files would be overwritten by merge
    (二)干货!获取该目录下,指定权限不为770的文件, 并设置权限为770
    【8】java新特性,双冒号 :: 的使用场景
    go(01) 基础语法
  • 原文地址:https://www.cnblogs.com/seanchang/p/8438702.html
Copyright © 2011-2022 走看看