Javascript 使用RequireJS垫片编写依赖项
我正在从jQuery 1.8升级到1.9,由于jQuery.browser()已被删除,我将使用 我的requirejs配置文件(使用data main=“”)看起来有点像: (已编辑-添加了更多代码片段) main comp.jsJavascript 使用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
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上,不总是)。我正在编辑我的问题以提供更多细节。我仍然遇到同样的问题。。。不知道那里出了什么问题。