添加在已经将jquery作为全局的页面上使用jquery的RequireJS模块

时间:2013-11-29 18:49:11

标签: javascript jquery requirejs

我有一个应用程序的附加组件(称为appX),允许用户使用javascript,css和appX的webservices api创建自己的自定义。

通常自定义很小,并且不涉及很多外部库/插件,但是当它们有外部库时,典型用户选择的库是jQuery。

在appX的下一个版本中,他们本身使用jQuery,我知道这将打破一些自定义。

所以我需要模块化这种情况。我还有其他一些问题,而RequireJS似乎是解决这些问题的好方法。 我只需要弄清楚如何在这种情况下正确应用RequireJS

在我的POC中,我按如下方式加载require.js:

<!--A bunch of other script including jQuery (but not require) are loaded already -->
<script type="text/javascript" src="/custom/js/require.js"></script>
<script type="text/javascript" src="/custom/js/dostuff.js"></script>

我们将调用jQuery加载appX jqueryx和我要加载的jqueryp(p为私有)

jQuery使用AMD,默认情况下在内部使用此定义:

define( "jquery", [], function () { return jQuery; } ); 

但是在这种情况下,在JQuery(jqueryx)之后加载RequireJS,所以没有默认的'jquery'定义是正确的吗?

在我向您展示我的问题之前还有一些背景......文件结构是这样的:

appx
    /js:
        jqueryx.js
        other.js
appx
    /custom/js:
        jqueryp.js
        dostuff.js

看看RequireJS api,似乎我应该做something like this

require.config({
    baseUrl : 'custom/js',
    paths : { 'jquery' : 'jqueryp'},
    map: {
      '*': { 'jquery': 'jquery-private' },
      'jquery-private': { 'jquery': 'jquery' }
   }
});

define(['jquery'], function (jq) {
    return jq.noConflict( true );
});

require(['jquery'], function(jq){
    console.log(jq.fn.jquery);
});

但是当我这样做时,我收到一个错误:

Mismatched anonymous define() module: function (jq)...

我已经玩过切换jqueryjquery-private的引用,因为它有点混乱但没有进展。

我应该如何将RequireJS应用于这种情况?

1 个答案:

答案 0 :(得分:1)

差不多一年了,但总比没有答案好......

以下部分应移至“jquery-private.js”文件中:

define(['jquery'], function (jq) {
    return jq.noConflict( true );
});

您无法在主入口点定义模块。即使你可以,模块也没有名称,你会如何引用它?