无法加载使用命名定义调用的模块

时间:2014-05-19 14:20:17

标签: javascript requirejs

我正在使用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 时,该文件没有加载事件。

1 个答案:

答案 0 :(得分:1)

根据您在问题中显示的内容判断,urlTest加载了路径urlCore/urlTest,并且在此路径中有一个包含此文件的文件:

define("urlTest", [], function() {

只要RequireJS正在加载名为urlTest的模块,这就有效。没问题。但是,如果您需要最终解析为路径urlCore/urlTest的任何其他模块名称,则您遇到麻烦,因为模块名称与您在define呼叫中的名称不对应。或者换句话说,如果您的模块在名称urlCore/urlTest下需要加载时,模块文件中的define调用将不得不说:

define("urlCore/urlTest", [], function() {

简单的解决方法是不为define来电中的模块指定名称。只需将依赖项和回调放在一起,然后保留名称。

即使您在未指定模块名称的情况下使用define仍然必须小心,不要在下加载相同的模块两个不同的名称,因为如果你这样做,当你尝试使用第二个名称加载时会出现超时。在您在问题中显示的代码中,我建议在任何地方使用urlTest或在任何地方使用相对路径来加载此模块,但不要混合使用这两个模块。