使用requirejs中的插件停止全局jquery

使用requirejs中的插件停止全局jquery,jquery,jquery-plugins,global-variables,requirejs,Jquery,Jquery Plugins,Global Variables,Requirejs,我已经在下面正确地将jquery和jquerycookie一起工作。我想使jquery不是全局的。现在是。我尝试过的任何方法似乎都会破坏jquerycookie require.config({ paths: { "jquery": '../components/jquery/jquery', "jquery-cookie": "../components/jquery-cookie/jquery.cookie", }, shim: {

我已经在下面正确地将
jquery
jquerycookie
一起工作。我想使
jquery
不是全局的。现在是。我尝试过的任何方法似乎都会破坏
jquerycookie

require.config({
    paths: {
        "jquery": '../components/jquery/jquery',
        "jquery-cookie": "../components/jquery-cookie/jquery.cookie",
    },
    shim: {
        "jquery-cookie": {
            deps: ['jquery']
        }
    }
});

require(["jquery", "jquery-cookie"], function($) {
    console.log($().jquery); // 1.7.2
    console.log($.cookie("hello")); // null
});
以下更改将使jquery成为本地并中断cookie:

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

require(["nc-jquery", "jquery-cookie"], function($) {
    console.log($().jquery);
    console.log($.cookie("hello"));
});

我发现这是可行的,我只是不认为这是最好的解决方案

require(["jquery", "jquery-cookie"], function() {
    var $ = jQuery.noConflict(true);
    console.log($().jquery);
    console.log($.cookie("hello"));
});

下面是我对这段代码的解释以及它工作的原因
jquerycookie
在其代码中使用
$
,并且使用此
$
是全局的,刚好有足够的时间让jquery和cookie加载。我使用noConflict将其设置为本地,允许在该需求中使用
$

jquery和jquery cookie都是AMD兼容的,因此不需要进行任何垫片配置。只要定义了一个名为“jquery”的路径(确实如此),jquery cookie模块就会需要它,并且在没有全局$的情况下加载依赖项。请参阅中的这一行,其中查找名为“jquery”的模块:

if (typeof define === 'function' && define.amd) {
    // AMD. Register as anonymous module.
    define(['jquery'], factory);
正如您在原始示例中所示,您可以将jQuery包装为nc查询以消除全局$。您可能需要做的另一件事是为您想要自动使用的任何库创建一个“映射”条目

因此,您的示例的修改版本如下所示:

require.config({
    paths: {
        'jquery': '../components/jquery/jquery',
        'jquery-cookie': '../components/jquery-cookie/jquery.cookie'
    },
    map: {
        'jquery-cookie': { 'jquery': 'nc-jquery' }
    }
});

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

require(['nc-jquery', 'jquery-cookie'], function(myNonGlobaljQuery) {
    console.log(myNonGlobaljQuery().jquery);
    console.log(myNonGlobaljQuery.cookie("hello"));
});

这意味着当jQueryCookie请求“jquery”时,您将改为“nc jquery”。您可以根据需要为任何希望以这种方式工作的库创建任意多个这样的库。请参阅.

如果您在页面上运行此命令,请转到控制台并检查
$
的值,这是jQuery。所以上面的代码将jQuery设置为全局。感谢您分享地图功能,我不知道。不幸的是,这不起作用,这里有一个错误@ThomasReggi jQuery和jqueryui的什么版本?您可以将当前版本发布为JSFIDLE或gist吗?在这里,我希望您已经安装了bowerXD@ThomasReggi我下载了您的示例项目,它运行良好。你能重新发布你得到的错误吗(上面要点中的行号似乎与你发布的示例项目不符)