使用 Require.js 引用第三方框架时遇到的一些情况

在使用Require.js解析依赖的时候,会出现以下几种情况:

程序中的依赖关系 当前程序 依赖于 B包B包 依赖于 A包

  1. A包与B包两者都支持AMD,此时不需要任何操作:

     //B.js
    define(['A'],function(a){
    //code in module B
    })
  2. A包与B包两者都不支持AMD,此时,有以下两种解决方案:

    1. 修改库,使之支持AMD(这也是Sea.js中让人深恶痛绝的一点)

    2. 使用Shim的deps和exports,此时全局变量依然可用,这样可以防止出现奇怪的依赖问题

         //main.js
      require.config({
      //other configurations
      shim{
      'B':{
      deps:['A'],
      exports:'B'
      },
      'A':{
      exports:'A'
      }
      }
      }); //B.js
      var B = new function(){
      var a = new A();
      //code for B
      } //A.js
      var A = new function(){
      //code for A
      }
  3. A包不支持AMD,而B包支持AMD,此时只需要用shim把A包导入到require环境中,不需要任何其他操作。

  4. A支持AMD,而B包不支持AMD,这个时候,由于在引用的时候监测到为AMD的环境,

    所以有的框架就不会创建全局变量了,而B包并不支持AMD,它还是使用的全局变量,

    这个时候,就会出现无法引用的情况了。解决方案也很简单。就是在B包的shim配置中,

    加上init方法,并在init里将A包的变量设置成全局的:

     //main.js
    require.config({
    //other configurations
    shim{
    'B':{
    deps:['A'],
    exports:'B',
    init:function(A){
    window.A = A;
    }
    }
    }
    });

在引用angular.js的时候,需要在对应的html页面中把ng-app去掉,而在声明完angular模块的时候,

使用angular.bootstrap手动启动angular才行,否则会报错,特别是在与其他模块同时使用的时候。

    //myapp.js
require(['angular','jquery'],function(angular,$){
var app = angular.module('MyApp', []);
//your code in module
angular.bootstrap(document,['MyApp']);
});

以上就是我初次使用requirejs管理包的时候出现的一些问题。

使用 Require.js 引用第三方框架时遇到的一些情况的更多相关文章

  1. 引用第三方框架 不支持ARC

    我们会常常遇到一个问题就是引用第三方框架之后发现不支持内存的自己主动处理(ARC) 我们须要这样来操作: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdT ...

  2. iOS开发中遇到的错误整理 - 集成第三方框架时,编译后XXX头文件找不到

    iOS编译报错-XXX头文件找不到 错误出现的情况: 自己在继承第三方的SDK的时候,明明导入了头文件,但是系统报错,提示头文件找不到 解决方法 既然系统找不到,给他个具体路径,继续找去! 路径就填写 ...

  3. js操作iframe框架时应该屡清楚的一些概念

    1.获取iframe的window对象 存在跨域访问限制. iframeElement.contentWindow 兼容 2.获取iframe的document对象 存在跨域访问限制. chrome: ...

  4. html-jquery/js引用外部图片时遇到看不了或出现403情况解决方法

    <script type="text/javascript"> function showImg(url) { var frameid = 'frameimg' + M ...

  5. require.js 入门笔记

    网站越来越庞大,JS也是越写越多. 当所有的JS 都集中在 HTML的 head 部分时,网页加载变得很慢,很多的 JS代码也并不是全都适用在当前的页面,造成了代码的冗余度非常高. 而且长长的JS代码 ...

  6. React-Native 之 GD (一)目录结构与第三方框架使用与主题框架搭建

    1.APP效果图 2.工程环境配置 IOS: 将压缩包内的 Images.xcassets 文件夹直接替换掉我们iOS工程中的 Images.xcassets 文件夹. 这时候我们可以看到所有图片资源 ...

  7. VS中引用第三方库的方法(配置sqlite数据库)

    我们在编写程序时,,不可避免的会使用第三方的库文件,很少使用源文件(.cpp),大部分是使用对类进行声明的头文件和封装了类的链接库(静态lib或动态dll),比如我们写程序用的iostream这个库, ...

  8. require.js初试(with angular & optimization)

    如果你只是想找一款称手的js加载器,可以参考这篇js loader benchmarks(http://artzstudio.com/files/Boot/test/benchmarks/script ...

  9. r.js合并实践 --项目中用到require.js做生产时模块开发 r.js build.js配置详解

    本文所用源代码已上传,需要的朋友自行下载:点我下载 第一步: 全局安装  npm install -g requirejs 第二步: 1.以下例子主要实现功能, 1)引用jq库获取dom中元素文本, ...

随机推荐

  1. iOS 8以上的设置的跳转

    iOS8以上的系统应用可以与设置进行深层的交互,用户可以根据APP的需要进行对应的权限的设置. 现在大多数的APP依旧仅仅是弹出一个包含操作指令的警示窗口,如“进入设置>隐私>位置> ...

  2. hdu Phone List

    Problem Description Given a list of phone numbers, determine if it is consistent in the sense that n ...

  3. CODEVS 1062 路由选择

    1062 路由选择  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题目描述 Description 在网络通信中,经常需要求最短路径.但完全用最短路径传 ...

  4. window.open() | close()方法

    Window对象的open()方法可以打开一个新的浏览器窗口(或标签页),window.open()载入指定的URL到新的或已存在的窗口中,返回代表那个窗口的window对象,它有4个可选的参数 1. ...

  5. 解决Windows 7/win8 使用VMware虚拟机的NAT 不能上网

    最近在学习linux系统,在使用debian6更新源的时候,发现Nat模式上网就是配置不了.而内外网可以ping通.所以很苦恼.最后终于解决了. 以下操作在VMware10下进行 1.首先要设置一下 ...

  6. window系统查看端口被哪个进程占用

    ---恢复内容开始--- 1.在cmd窗口运行 netstat -ano | findstr 1099 找到进程PID 8408 杀死进程:taskkill -F -PID 8408 2.另外还找到进 ...

  7. 为什么说 Git 比 SVN 更好

    为什么说 Git 比 SVN 更好 在版本控制系统的选型上,是选择Git还是SVN? 对于开源项目来说这不算问题.使用Git极大地提高了开发效率.扩大了开源项目的参与度. 增强了版本控制系统的安全性, ...

  8. [TYVJ] P1003 越野跑

    越野跑 背景 Background 成成第一次模拟赛 第二道     描述 Description     为了能在下一次跑步比赛中有好的发挥,贝茜在一条山路上开始了她的训练.贝茜希望能在每次训练中跑 ...

  9. 用php理解指针--写给刚刚学习编程的人

    在刚刚学习编程时,可能for循环什么的还是可以理解,但是当学习到指针的时候,课上估计很多人就睡觉去了. 现在用两端php程序说明指针 先写一个简单的,大家都理解下 <?php class tex ...

  10. Delphi的核心优势:三快一多

    快是指:开发快(RAD开发),编译快(好像是没有用到LL(1),从而避免了潜在的歧义),运行快(原生代码). 多是指:开发符合PME标准的可视化控件,易开发,易使用,所以第三方控件特别多,这个不用解释 ...