即使模块已加载并引用自身,requirejs路径也会出现问题

时间:2014-09-28 06:28:14

标签: path requirejs config

问题是我如何修复模块1的路径问题,如控制台日志所示?

基本信息 - 最新版本的requirejs,下划线和jquery,位于库

目录布局

library
templates
-default
--js
---lib.js
---module1.js

-scripts
--calendar
---module2.js
--jquery.alpha.js
--jquery.beta.js

-main.js
index.php

在index.php

<script>var Template="default/"</script> //todo convert to session 
<script>var Domain="mygsd"</script> //todo convert to session 
<script src="library/require.js/require.js" data-main="templates/main">

main.js

var templatejs = Template+'js/';
var scripts = 'scripts/';
require.config({
    baseUrl:"templates/", 
    catchError: true,
    paths: {    
        jquery: '//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min',
        underscore: 'library/underscore',
        libs:templatejs+'lib',
        scripts: scripts,

    },
    shim: {
        'jQuery': {
            exports: '$'
        },
        'underscore': {
            exports: '_'
        }
    }
});

require(['libs']);
define(["jquery", "scripts/jquery.alpha", "scripts/jquery.beta"], function($) {
    $(function() {
        $('body').alpha().beta();
    });
});

libs.js

define([templatejs+'module1', scripts+"calendar/module2"], function(module1ref, module2ref){
var module1 = new module1ref(),
      module2 = new module2ref();
console.log(module1.getName() === module2.getModule1Name()); 
});

module1.js

define([], function () {
    var returnedModule = function () {   
        var _name = 'module1 name';
        this.getName = function () {
            return _name;
        };
    };
    return returnedModule;
});

module2.js

define(['module1'], function (module1ref) {
    var module1 = new module1ref();
    var returnedModule = function () {
        this.getModule1Name = function () {
            return module1.getName();
        };
    };
    return returnedModule;
});  

控制台日志

Completed load of main                                                              require.js (line 1531)
Loading jquery from //ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js      require.js (line 1650)
Loading scripts/jquery.alpha from templates/scripts//jquery.alpha.js                require.js (line 1650)
Loading scripts/jquery.beta from templates/scripts//jquery.beta.js                  require.js (line 1650)
Loading libs from templates/default/js/lib.js                                       require.js (line 1650)
Completed load of scripts/jquery.alpha                                              require.js (line 1531)
Completed load of scripts/jquery.beta                                               require.js (line 1531)
Completed load of libs                                                              require.js (line 1531)
Loading default/js/module1 from templates/default/js/module1.js                     require.js (line 1650)
Loading scripts/calendar/module2 from templates/scripts//calendar/module2.js        require.js (line 1650)
Completed load of default/js/module1                                                require.js (line 1531)
Initializing default/js/module1                                                     require.js (line 1662)
Completed load of scripts/calendar/module2                                          require.js (line 1531)
Loading module1 from templates/module1.js                                           require.js (line 1650)
Completed load of jquery                                                            require.js (line 1531)
Initializing jquery                                                                 require.js (line 1662)
Initializing scripts/jquery.alpha                                                   require.js (line 1662)
Initializing scripts/jquery.beta                                                    require.js (line 1662)
Initializing main                                                                   require.js (line 1662)
"NetworkError: 404 Not Found - http://local:81/mygsd/templates/module1.js"                      module1.js

1 个答案:

答案 0 :(得分:0)

由于module1的路径在module2中不正确,因此我获得了默认/备份路径。 应该是:

define([templatejs + 'module1'], function (module1ref){ var module1 = new module1ref(); var returnedModule = function (){ this.getModule1Name = function (){ return module1.getName(); }; }; return returnedModule; });

顺便说一下,感谢那个花了时间来解决问题而不是回答问题的傻瓜。