Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用requirejs正确定义垫片配置_Javascript_Jquery_Requirejs - Fatal编程技术网

Javascript 如何使用requirejs正确定义垫片配置

Javascript 如何使用requirejs正确定义垫片配置,javascript,jquery,requirejs,Javascript,Jquery,Requirejs,我通过RequireJS加载了jQuery和jQuery插件 这就是我的requirejs.config的样子: requirejs.config({ baseUrl: "http://mysite.example.com", "paths": { // libraries "jquery": "Static/js/library/jquery/jquery-1.10.2", "jquery_sortable" : "Static/js/library/jquery-s

我通过
RequireJS
加载了
jQuery
jQuery
插件

这就是我的
requirejs.config
的样子:

requirejs.config({
baseUrl: "http://mysite.example.com",
"paths": {

    // libraries
    "jquery": "Static/js/library/jquery/jquery-1.10.2",
    "jquery_sortable" : "Static/js/library/jquery-sortable/jquery-sortable",

    shim: {
        'jquery_sortable': ['jquery']
    }
}
});
当我快速刷新页面两次或两次以上时,
有时
我会在插件代码中发现一个异常:

未捕获引用错误:未定义jQuery

基本上,我的插件没有使用我为它设置的
垫片


指定我的
垫片
配置最可靠的方法是什么???

这很奇怪,因为我在网上看到的所有示例都将
垫片
配置放在
requirejs.config
的最后一位,但将其放在顶部似乎解决了我的问题

requirejs.config({
    baseUrl: "http://mysite.example.com",
    shim: {
            'jquery_sortable': ['jquery']
        },
    "paths": {

        // libraries
        "jquery": "Static/js/library/jquery/jquery-1.10.2",
        "jquery_sortable" : "Static/js/library/jquery-sortable/jquery-sortable"

    }
});

这很奇怪,因为我在网上看到的所有示例都将
shim
config放在
requirejs.config
的最后一位,但将其放在顶部似乎解决了我的问题

requirejs.config({
    baseUrl: "http://mysite.example.com",
    shim: {
            'jquery_sortable': ['jquery']
        },
    "paths": {

        // libraries
        "jquery": "Static/js/library/jquery/jquery-1.10.2",
        "jquery_sortable" : "Static/js/library/jquery-sortable/jquery-sortable"

    }
});

可能是因为您没有按照预期进行构建。正如您所注意到的,您正在将
垫片
放入
路径
中。可能是

"paths": {

// libraries
"jquery": "Static/js/library/jquery/jquery-1.10.2",
"jquery_sortable" : "Static/js/library/jquery-sortable/jquery-sortable",

shim: {
    'jquery_sortable': ['jquery']
}
}

-------评论后编辑------

可能试图定义手册中声明的dep

'foo': {
    deps: ['bar'],
    ...

来源:

可能是因为您没有按预期进行构造。正如您所注意到的,您正在将
垫片
放入
路径
中。可能是

"paths": {

// libraries
"jquery": "Static/js/library/jquery/jquery-1.10.2",
"jquery_sortable" : "Static/js/library/jquery-sortable/jquery-sortable",

shim: {
    'jquery_sortable': ['jquery']
}
}

-------评论后编辑------

可能试图定义手册中声明的dep

'foo': {
    deps: ['bar'],
    ...

来源:

我觉得发生这种情况是因为RequireJS正在异步加载脚本。发生这种情况是出于性能原因,即脚本将并行加载。这是正常的AMD模块正常;RequireJS将从
define([“deps”],function(){…})
调用中保留依赖关系树,但将推迟
function()
的执行,直到其依赖关系得到解决

但是,对于非AMD、填充模块(如jQueryUI),整个脚本将在加载时执行。这意味着,如果“sortable”在“jquery”之前加载,它将找不到它的依赖项,并在编写时失败

我认为唯一可靠的解决方法是将jQuery作为一个普通的
标记包含在
require.js
之后。这样,您就不能使用
data main
属性来加载入口点,您必须
单独要求它:

<script src="scripts/lib/requirejs/require.js"></script>
<script src="scripts/lib/jquery/jquery.js"></script>
<script>
    require(["app/bootstrap"]);
</script>

需要([“应用程序/引导程序”]);

我觉得发生这种情况是因为RequireJS异步加载脚本。发生这种情况是出于性能原因,即脚本将并行加载。这是正常的AMD模块正常;RequireJS将从
define([“deps”],function(){…})
调用中保留依赖关系树,但将推迟
function()
的执行,直到其依赖关系得到解决

但是,对于非AMD、填充模块(如jQueryUI),整个脚本将在加载时执行。这意味着,如果“sortable”在“jquery”之前加载,它将找不到它的依赖项,并在编写时失败

我认为唯一可靠的解决方法是将jQuery作为一个普通的
标记包含在
require.js
之后。这样,您就不能使用
data main
属性来加载入口点,您必须
单独要求它:

<script src="scripts/lib/requirejs/require.js"></script>
<script src="scripts/lib/jquery/jquery.js"></script>
<script>
    require(["app/bootstrap"]);
</script>

需要([“应用程序/引导程序”]);

ilpaijin有答案。您最初将
垫片
放在
路径
内,这是不正确的。您的修复工作正常,因为当您将
垫片
移动到
路径
之前时,您也将其移到了
路径
之外。如果将
shim
移动到
path
之后,但将其保留在
path
之外,您的配置也会正常工作。正如我在上面评论的那样:不,当我试图将代码粘贴到
stackoverflow
中时,它一定是一个错误。我肯定这不是问题。伊尔帕金有答案。您最初将
垫片
放在
路径
内,这是不正确的。您的修复工作正常,因为当您将
垫片
移动到
路径
之前时,您也将其移到了
路径
之外。如果将
shim
移动到
path
之后,但将其保留在
path
之外,您的配置也会正常工作。正如我在上面评论的那样:不,当我试图将代码粘贴到
stackoverflow
中时,它一定是一个错误。我肯定这不是问题所在。不,当我试图将代码粘贴到
stackoverflow
中时,一定是出错了。我肯定这不是问题所在。不,当我试图将代码粘贴到
stackoverflow
中时,一定是出错了。我肯定这不是问题所在。