首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >停止全局jquery,并将plugin放在requirejs中

停止全局jquery,并将plugin放在requirejs中
EN

Stack Overflow用户
提问于 2013-03-22 23:48:09
回答 2查看 2K关注 0票数 2

我让jqueryjquery-cookie在下面正确地协同工作。我想让jquery不是全球性的。现在就是这样。我尝试过的任何方法似乎都会破坏jquery-cookie

代码语言:javascript
运行
复制
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成为本地和break cookie:

代码语言:javascript
运行
复制
define("nc-jquery",['jquery'], function () {
    return jQuery.noConflict(true);
});

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

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-22 23:57:49

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

代码语言:javascript
运行
复制
require(["jquery", "jquery-cookie"], function() {
    var $ = jQuery.noConflict(true);
    console.log($().jquery);
    console.log($.cookie("hello"));
});

我对这段代码及其工作原理的解释如下所示。jquery-cookie在它的代码中使用$,并且使用这个$是全局的,只需要足够的时间来加载jquery和cookie。我使用noConflict将其设置为本地,允许在此要求内使用$

票数 0
EN

Stack Overflow用户

发布于 2013-03-23 02:47:01

jquery和jquery-cookie都是AMD兼容的,所以不需要做任何填充配置。只要你已经定义了一个叫做'jquery‘的路径(你已经定义了),jquery-cookie模块就会需要它并在没有全局$的情况下很好地加载依赖项。在jquery-cookie source code中可以看到这一行,它在其中查找一个名为‘jquery’的模块:

代码语言:javascript
运行
复制
if (typeof define === 'function' && define.amd) {
    // AMD. Register as anonymous module.
    define(['jquery'], factory);

正如您在原始示例中所展示的,您可以将jQuery包装为nc- $以消除全局查询。你可能需要做的另外一件事是为你想要自动使用的任何库创建一个'map‘条目。

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

代码语言:javascript
运行
复制
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"));
});

这意味着当jquery-cookie请求'jquery‘时,你会给它'nc-jquery’。您可以根据需要为您希望以这种方式工作的任何库创建任意多个这样的库。请参阅API docs for map

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15574500

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档