我正在使用RequireJS&它适用于某些模块。最近,我添加了两个测试模块(模块的代码似乎很好)。我在我的主(javascript)文件中导入它们,我可以看到该文件在浏览器中导入。但是,我看到以下错误消息,我无法正确解决可能导致此问题的原因。任何修复或解决此问题的建议将不胜感激。
浏览器中的错误消息
Error: No define call for urlCore/urlTest http://requirejs.org/docs/errors.html#nodefine
...{c=c[b]});return c}function C(b,c,d,g){c=Error(c+"\nhttp://requirejs.org/docs/er...
要导入的模块:
define("urlTest", [], function() { //no dependencies on other modules
'use strict';
var urlTest = function() {
this.getTestURL = function(url, urlChk) {
if (typeof url === 'undefined' || typeof urlChk === 'undefined' ||
url === '' || urlChk === '') { //we can check length instead as well || removing typeof does not solve the issue
throw new Error("urlCommon - url or urlChk values are invalid:" + url + "|" + urlChk);
}
if (url !== null && url.length > 0 && urlChk === "Y") {
return url;
}
}; //end of getTestURL
urlTest.version = '0.0.1';
};
return urlTest;
});
我试过这个,但它也不起作用:
/*
define("urlTest", [], function() { //no dependencies on other modules
'use strict';
return {
getTestURL : function(url, urlChk) {
if (url !== null && url.length > 0 && urlChk === "Y") {
return url;
}
}
} //end return
}); //end test module
*/
Main.js路径:
paths: {
//"jquery": "https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min"
'validateTest': 'validation/validateTest', //works
'normalizedXHR': 'xhr/normalizedXHR', //works
'urlTest': 'urlCore/urlTest', //does not work
'jsonTest': 'json/jsonTest' //does not work
}
更新 我正在使用此模块中的urlTest:
define('testResponse', ['./urlCore/urlTest', './json/jsonTest'], function(urlTest, jsonTest) {
'use strict';
另一次更新 当我将 enforceDefine 设置为true并且 waitSeconds 为大于0的值时,我收到以下错误(即使我看到JS文件正在浏览器中加载):< / p>
Error: Load timeout for modules: urlCore/urlTest
此urlTest是模块中的依赖项(位于另一个目录中)。当我尝试以下操作时,依赖项不会在浏览器中加载:
define('testResponse', ['../urlCore/urlTest'], function(urlTest) {
当我尝试以下操作时,该文件似乎在浏览器窗口中加载,但是我收到requirejs错误,指出模块错误的加载超时。
define('testResponse', ['./urlCore/urlTest'], function(urlTest) {
文件结构:
javascripts
javascripts/main.js
javascripts/abc/testResponse.js
javascripts/urlCore/urlTest.js
另一次更新 我可以调用驻留在单独目录中的其他模块。当这些目录中的一个模块例如,例如,问题出现了。 abc / testResponse依赖于urlCore / urlTest。这似乎对我来说是个问题。除了main.js之外,我是否应该在此模块中指定配置部分(我现在没有这样做)。
define('testResponse', ['./urlCore/urlTest'], function(urlTest) {
当我尝试 ../ urlCore / urlTest 时,该文件没有加载事件。
答案 0 :(得分:1)
根据您在问题中显示的内容判断,urlTest
加载了路径urlCore/urlTest
,并且在此路径中有一个包含此文件的文件:
define("urlTest", [], function() {
只要RequireJS正在加载名为urlTest
的模块,这就有效。没问题。但是,如果您需要最终解析为路径urlCore/urlTest
的任何其他模块名称,则您遇到麻烦,因为模块名称与您在define
呼叫中的名称不对应。或者换句话说,如果您的模块在名称urlCore/urlTest
下需要加载时,模块文件中的define
调用将不得不说:
define("urlCore/urlTest", [], function() {
简单的解决方法是不为define
来电中的模块指定名称。只需将依赖项和回调放在一起,然后保留名称。
即使您在未指定模块名称的情况下使用define
,仍然必须小心,不要在下加载相同的模块两个不同的名称,因为如果你这样做,当你尝试使用第二个名称加载时会出现超时。在您在问题中显示的代码中,我建议在任何地方使用urlTest
或在任何地方使用相对路径来加载此模块,但不要混合使用这两个模块。