2016-04-19 122 views
0

我必须使用现有的js库(A),我无法修改哪个库又使用3D方js库(B)。RequireJS和3d方依赖关系

A和B取决于jQuery的,但只有B是AMD兼容:

(function (root, factory) { 
     if (typeof define === 'function' && define.amd) { 
      return define('B', ['jquery'], function ($) { 
       return factory($, root); 
      }); 
     } else { 
      return factory(root.jQuery, root); 
     } 
    })(window, function ($, window) { 

    // Extend $ (jQuery) with a function myFunction 
} 

脚本负载顺序是:

  1. require.js + requireconfig.js
  2. 的jquery.js
  3. B.js
  4. A.js

问题是,当A尝试使用$ .myFunction时,它是未定义的。

我的RequireJS配置文件应该是什么样子,以便$ .myFunction不是未定义的?

回答

1

由于模块A不兼容AMD和同时取决于jquery和模块B,模块A需要你requireconfig.js一个shim

听起来你不需要模块B(因为它符合AMD标准) 垫片,但你也可以添加它,如果你喜欢

配置中的路径相对于requireconfig.js文件的位置。

require.config({ 
    ... 
    paths: { 
     "jquery": "your/path/to/jquery", 
     "A": "your/path/to/A", 
     "B": "your/path/to/B" 
    } 
    shim: { 
     A: ["jquery", "B"] 
    } 
}); 
+0

您的第二段不正确。你不应该为调用'define'的模块定义一个'shim'。这样做的结果是不确定的。 – Louis

+0

谢谢@Louis。固定。 –