make如果已经页面上requireJs不会重新加载的jQuery(Make requireJs n

2019-06-27 19:44发布

我正在写的意思是嵌入在第三方网站将功能添加到他们的脚本。 最近我撕掉了我相当混乱的自定义加载程序代码,并开始与requirejs替换它。 一个任选被载入我的库(取决于传递一些参数)是jQuery的。

这种运作良好,直到我的脚本包含一个网页,jQuery是已经打开,在这种情况下,这似乎是发生一些插件中途负荷,requirejs负荷的jQuery在页面的版本,和插件迅速打破。

要求客户只需重写他们的页面中使用这个脚本是出了问题,所以我想这样做是检测是否jQuery是已经加载,如果是,它通过requirejs跳过装载和使用已经加载一个(这将有可能打开我到奇数边缘情况和错误时,他们正在使用jQuery的更旧版本,但我没有太多的选择)。

我想我会做的是写一个新的模块,那先看看jQuery是加载,如果是,就导出jQuery对象,如果不是,然后加载它,然后做出口。 但是,我似乎被打乱,因为该模块的定义,功能似乎需要是同步的工作,所以我不能去,并且加载另一个脚本,这将是异步的,然后东西出口到requirejs。

我缺少的东西文档? 就是我在尝试不可能的?

Answer 1:

我有一个类似的项目同样的问题,使用require.js对于打算在第三方网站加载的库。 你可以看到我的做法在这里 ,但这里的简化版本:

// check for existing jQuery
var jQuery = window.jQuery,
    // check for old versions of jQuery
    oldjQuery = jQuery && !!jQuery.fn.jquery.match(/^1\.[0-4](\.|$)/),
    localJqueryPath = libPath + 'jquery/jquery-1.7.2.min',
    paths = {},
    noConflict;

// check for jQuery 
if (!jQuery || oldjQuery) {
    // load if it's not available or doesn't meet min standards
    paths.jquery = localJqueryPath;
    noConflict = !!oldjQuery;
} else {
    // register the current jQuery
    define('jquery', [], function() { return jQuery; });
}

// set up require
require.config({
    paths: paths 
});

// load stuff
require(['jquery', ... ], function($, ...) {

    // deal with jQuery versions if necessary
    if (noConflict) $.noConflict(true);

    // etc

});

正如你所看到的,这看起来jQuery的,然后无论是“jQuery的”模块定义为现有的库,或包装(如​​果没有jQuery的或现有的jQuery是一个老版本)加载库特定的jQuery的有noConflict

这工作得很好。 唯一的缺点是,你打电话require()动态脚本,这使得它更难以使用内r.js有效优化。



Answer 2:

我有一个类似的问题。我的剧本是重装的jQuery两次..从使用的意见解决在这篇文章中

工作就像一个魅力!

(这工作了评论:

“我把它放在我的配置文件中的requirejs.config(...)之后和之前requirej([”应用“])和它的工作”)



文章来源: Make requireJs not reload jQuery if already on page