Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/25.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_Requirejs - Fatal编程技术网

Javascript 使用RequireJS垫片编写依赖项

Javascript 使用RequireJS垫片编写依赖项,javascript,requirejs,Javascript,Requirejs,我正在从jQuery 1.8升级到1.9,由于jQuery.browser()已被删除,我将使用 我的requirejs配置文件(使用data main=“”)看起来有点像: (已编辑-添加了更多代码片段) main comp.js require.config({ paths: { jquery: 'libs/jquery/jquery1.9.1.min', utils: 'modules/utils', myController: "c

我正在从jQuery 1.8升级到1.9,由于jQuery.browser()已被删除,我将使用

我的requirejs配置文件(使用data main=“”)看起来有点像:

已编辑-添加了更多代码片段)

main comp.js

require.config({
    paths: {
        jquery: 'libs/jquery/jquery1.9.1.min',
        utils: 'modules/utils',
        myController: "controllers/myController",
        browserPlugin: 'libs/jquery/jquery.browser.min'
    },
    shim: {
        browserPlugin: {
            deps: ['jquery']
        }
    }
});

require(['myController', 'jquery'], function (controller, $) {
        $(controller.start);
    }
);
define(['browserPlugin'], function () {
    return {
        browser: $.browser
    };
});
define(['utils'], function (utils) {
    function start() {
        console.log(utils.browser.msie)
    }
    return {
        start: start
    };
});
模块/utils.js

require.config({
    paths: {
        jquery: 'libs/jquery/jquery1.9.1.min',
        utils: 'modules/utils',
        myController: "controllers/myController",
        browserPlugin: 'libs/jquery/jquery.browser.min'
    },
    shim: {
        browserPlugin: {
            deps: ['jquery']
        }
    }
});

require(['myController', 'jquery'], function (controller, $) {
        $(controller.start);
    }
);
define(['browserPlugin'], function () {
    return {
        browser: $.browser
    };
});
define(['utils'], function (utils) {
    function start() {
        console.log(utils.browser.msie)
    }
    return {
        start: start
    };
});
myController.js

require.config({
    paths: {
        jquery: 'libs/jquery/jquery1.9.1.min',
        utils: 'modules/utils',
        myController: "controllers/myController",
        browserPlugin: 'libs/jquery/jquery.browser.min'
    },
    shim: {
        browserPlugin: {
            deps: ['jquery']
        }
    }
});

require(['myController', 'jquery'], function (controller, $) {
        $(controller.start);
    }
);
define(['browserPlugin'], function () {
    return {
        browser: $.browser
    };
});
define(['utils'], function (utils) {
    function start() {
        console.log(utils.browser.msie)
    }
    return {
        start: start
    };
});
一切似乎都正常工作,但后来我看到中的有时IE中只有
我得到一个
“jQuery”是未定义的
(这里是大写的Q),或者
“$”是未定义的
错误,来自
jQuery.browser.min.js
文件

我认为
deps
意味着jquery将在jquery.browser文件之前加载,但显然情况并非总是如此。我尝试了以下操作并添加了导出:“$.fn.browser”
,但没有成功

当运行一个优化版本(使用r.js的minify+uglify)时,我没有遇到过它


我做错了什么?

您需要确保在
require
回调中引用
$
作为参数。像这样:

require(['myController', 'jquery'], function (controller, $) {
        $(controller.start);
    }
);

这确保了jQuery可供使用。这有点奇怪,因为它无论如何都会在全局公开自己,所以有时不管怎样它都会工作,但正确的方法是显式地要求它,并在回调中使用它作为参数。

看起来您在modules/utils.js中缺少jquery依赖项,请尝试:

define(['jquery', 'browserPlugin'], function ($) {
  return {
    browser: $.browser
  };
});
另外,为了安全起见,将jquery添加到您的垫片中:

jquery: {
  exports: "$"
},

顺便说一句,为什么不在代码中使用$.browser,然后使用shim配置加载jquery插件呢?

我也遇到了同样的问题,
data main中的脚本是异步加载的,这意味着它可能会在它定义的脚本之后加载

解决方案是在
require.js
脚本之后加载另一个带有
require.config
的脚本


.

谢谢,但不幸的是,它没有帮助,我仍然会收到这些错误(在IE上,不总是)。我正在编辑我的问题以提供更多细节。我仍然遇到同样的问题。。。不知道那里出了什么问题。