2013-03-11 6 views
0

В моем проекте у меня есть папка js с несколькими файлами. Один файл под папкой js, app.js, зависит от других файлов также в этой папке.requirejs - не загружать модуль с использованием относительного пути

Я читаю здесь (Relative module names inside define()), что если вы используете «местный запрос», вы можете загружать модули с использованием относительных путей. Так, например, если у меня есть:

js 
|- app.js 
|- util.js 
|- logger.js 

Тогда я могу сделать:

//in app.js 
define(function(require){ 
var util = require("./util"); 
var logger = require("./logger");  
... 
}); 

Но по какой-то причине это не работает для меня. То, что я вижу, случается, заключается в том, что модули используют & logger, которые запрашиваются относительно базового Url I, определенного в моей конфигурации.

Это не то, что я ожидал, и я не могу понять, почему это происходит, особенно потому, что у меня есть другие модули в моем проекте, которые работают правильно с относительными путями.

Любая помощь приветствуется.


Update

Возможно ли, что это происходит здесь, потому что я загрузке app.js из другого модуля, используя глобальные требуют?

В init.js у меня есть:

//in init.js 
require(["config"], function (config) { 
    require(["app"], function (app) { 
    }); 
}); 

Может ли это быть причиной проблемы?

ответ

0

1-й. Старайтесь избегать вызовов стиля CommonJS до require Идите в стиле AMD.

CommonJS стиль:

var result = require(resource) 

AMD стиль:

require([resource], function(result){}) 

RequireJS делает НЕ делать синхронизации загрузки ресурсов стиля CJS. Он эмулирует его, проверяя тело функции и вводя требования в определение. Вы не видите, но то, что вы написали там на самом деле бежал как:

// app.js 
define(['require', 'exports', 'module', './util', './logger'], function(require){ 
    var util = require("./util"); // <- "sync" call is ok because it's pre-loaded 
    var logger = require("./logger"); // <- "sync" call is ok because it's pre- 
}); 

Вы вступаете на территорию вуду там. Постарайтесь быть четко о том, что вам нужно вместо этого:

// app.js 
define(['./util', './logger'], function(util, logger){ 
    ... 
}); 

Но если вы действительно хотите, чтобы играть с «местным» требуют, сделать это в AMD, как это наверняка пинков во всех правилах разрешения на модуль ID:

// app.js 
define(['require'], function(require){ 
    require(
     ['./util', './logger'] 
     , function(util, logger){ 
      ... 
     } 
    ) 
}); 

Кроме того, эта часть не имеет смысла для меня:

require(["config"], function (config) { 
    require(["app"], function (app) { 
    }); 
}); 

Я бы ожидать "app" быть "js/app" что значение baseUrl - 'js'?

Пути в app.js определяют внешний вид справа, но может возникнуть проблема с требованием RequireJS "app".

Смежные вопросы