使用 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. 去空格 whitespaceAndNewlineCharacterSet

    http://blog.csdn.net/worn_nest/article/details/10155495

  2. 如何修改UIButton按下后默认的蓝色效果

    其实有两个简单方法:1.修改xib属性检查器Highlight Tint的值: 2.通过代码修改:btn.tintColor=[UIColor grayColor];或者[btn setTintCol ...

  3. web 调用OPC HRESULT:0x80070005 (E_ACCESSDENIED))

    除了配置DCOM外,还需要在web.config里面添加设置系统管理员权限的帐号和密码<identity impersonate="true" userName=" ...

  4. POJ - 2653 - Pick-up sticks 线段与线段相交

    判断线段与线段相交 莫名其妙的数据量 #include <iostream> #include <cstdio> #include <vector> #includ ...

  5. c++模板编程-typename与class关键字的区别

    最近一直在研究c++模板编程,虽然有些困难,但希望能够坚持下去.今天,在书上看见一个讨论模板编程typename与class两个关键字的区别,觉得挺有意义的,就把它们给总结一下. 先看一个例子: te ...

  6. PAT 65. A+B and C (64bit) (20)

    题目链接:http://pat.zju.edu.cn/contests/pat-a-practise/1065 思路分析: 1)对a+b造成的long long 类型的数据溢出进行特殊处理: a> ...

  7. Hadoop文件的基本操作

    Hadoop提供了大量的API对文件系统中的文件进行操作,主要包括: (1)读取文件 (2)写文件 (3)读取文件属性 (4)列出文件 (5)删除文件 1、读取文件 以下示例中,将hdfs中的一个文件 ...

  8. deb包处理

    1.卸载 dqpg -l 查看信息 dqpg -r  ******  卸载 2.安装 dqpg -i ...............deb

  9. python time模块函数

    # -*-coding=utf-8 -*- __author__ = 'piay' import time def get_struct_time(): ''' 可以使用list或者字符串格式化 tm ...

  10. 100个iOS开发/设计程序员面试题汇总,你将如何作答?

    100个iOS开发/设计程序员面试题汇总,你将如何作答? 雪姬 2015-01-25 19:10:49 工作职场 评论(0)   无论是对于公司还是开发者或设计师个人而言,面试都是一项耗时耗钱的项目, ...