RequireJS的jQuery插件没有全局$变量

米勒

我不知道这是否可行,但我正在尝试开发一个应用程序,该应用程序在加载jQuery时不会创建全局$jQuery变量,但仍可用于某些并非基于AMD开发的插件。

主脚本

require.config({
    baseUrl: '/js/lib',
    paths: {
        jquery: 'vendor/jquery-2.1.3.min',
        somePlugin: 'vendor/somePlugin.min'
    },
    map: {
        '*': { jquery: 'secret-jquery' },
        'secret-jquery': { jquery: 'jquery' }
    },
    shim: {
        somePlugin: ['jquery']
    }
});

secret-jquery.js

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

不幸的是,它像这样设置了jQuery插件:

somePlugin.min.js

$.fn.somePlugin = function (options) {
    // ...
});

如果我将插件源更改为use define则不需要垫片,即

define(['jquery'], function ($) {
    $.fn.somePlugin = function (options) {
        // ...
    });
});

但这违反了不修改第三方插件的规则,尤其是我以后可能会用更新版本换掉的流行插件。

不能使用全局$jQuery变量,因为我的脚本需要将jQuery注入可能已经加载了它的页面上(并因此使用不兼容的API加载了另一个版本,并且jQuery无法破坏页面上的任何内容)。

有没有一种干净的方法可以做到这一点,还是仅更改插件代码的最佳方法?我想不出其他任何方法,通过XMLHttpRequest保存脚本中的负载,通过define调用包装它,然后调用eval它,这似乎违背了让RequireJS处理脏工作的目的。

聪明的男孩

我们这样做的方法是像这样定义secret-jquery.js:

define(['jquery', 'vendor/somePlugin.min'], function (jQuery) {
    return jQuery.noConflict(true);
});

随着我们的配置看起来像:

require.config({
    baseUrl: '/js/lib',
    paths: {
        jquery: 'vendor/jquery-2.1.3.min',
        somePlugin: 'vendor/somePlugin.min'
    },
    map: {
        '*': { jquery: 'secret-jquery' },
        'secret-jquery': { jquery: 'vendor/jquery-2.1.3.min' }
    },
    shim: {
        somePlugin: ['jquery']
    }
});

这使我们在不使用RequireJS的jQuery插件中遇到的问题最少,同时仍允许我们在自己的代码中利用RequireJS。当然,我们没有跟踪一段代码使用哪个jQuery插件,但是我认为,无论如何,jQuery插件通常都不是为了简化这一过程而开发的,因为即使它们能够使用RequireJS,它们也通常不会使用返回任何内容,而是扩展jQuery本身。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

requirejs导出全局变量

来自分类常见问题

没有受限的全局变量

来自分类Dev

全局变量PHP没有更新

来自分类Dev

jQuery使全局变量

来自分类Dev

全局变量,jQuery

来自分类Dev

使变量在没有全局变量的函数外部可用

来自分类Dev

使变量在没有全局变量的函数外部可用

来自分类Dev

RequireJS中的局部/全局变量

来自分类Dev

反应模式没有全局变量/单节

来自分类Dev

笨拙的构建没有暴露我需要的全局变量

来自分类Dev

递归地反转没有全局变量的链表

来自分类Dev

在没有全局变量的C ++函数中创建数组

来自分类Dev

没有全局变量的window.onload

来自分类Dev

没有全局变量初始化

来自分类Dev

如何计算没有全局变量的函数的调用次数?

来自分类Dev

如何计算没有全局变量的函数的调用次数?

来自分类Dev

如何计算没有全局变量的函数的调用次数?

来自分类Dev

函数内部的JavaScript延迟,没有全局变量

来自分类Dev

递归地反转没有全局变量的链表

来自分类Dev

没有全局变量或函数参数的递归调用

来自分类Dev

R 中没有全局变量的范围

来自分类Dev

没有extern的头文件中的全局变量

来自分类Dev

Elixir Phoenix全局变量插件

来自分类Dev

使用requirejs意味着不再有全局变量了吗?

来自分类Dev

如何在jQuery插件中多实例化使用全局变量

来自分类Dev

为什么局部变量没有默认类型而全局变量在C中呢?

来自分类Dev

matlab中未定义的函数或没有全局变量的变量

来自分类Dev

在 C 中没有全局变量或更改函数输入的函数内部数组的变量分配

来自分类Dev

全局变量超出范围!有没有搞错?