Мне тоже не понравилась конфигурация в map
. Самый простой способ, которым я это сделал, - написать плагин для требуемого.
Давайте назовем плагин mod
, где он будет использоваться в качестве mod!module/someModule
, вы также можете вызвать его index
как в index!module/someModule
, что подходит вам лучше всего.
define(function(require, exports, module) {
// loading module/someModule/index.js with `mod!`
var someModule = require('mod!module/someModule');
// whatever this is about ..
module.exports = { .. };
});
Итак, давайте предположим, что вы имеете paths
набор в требуют своей конфигурации с какой-то структуры проекта:
- app
- modules
- someModule/index.js // the index we want to load
- someModule/..
- someModule/..
- etc
- plugins
- mod.js // plugin to load a module with index.js
Требует конфигурации:
require.config({
paths: {
'module': 'app/modules',
// the plugin we're going to use so
// require knows what mod! stands for
'mod': 'app/plugins/mod.js'
}
});
Чтобы прочитать все аспекты того, как писать плагин, read the docs at requirejs.org. Простейшей версией было бы просто переписать name
запрошенного «модуля», к которому вы пытаетесь получить доступ, и передать его обратно на load
.
приложение/плагины/mod.js
(function() {
define(function() {
function parse(name, req) {
return req.toUrl(name + '/index.js');
}
return {
normalize: function(name, normalize) {
return normalize(name);
},
load:function (name, req, load) {
req([parse(name, req)], function(o) {
load(o);
});
}
};
});
})();
Это не код производства, это просто простой способ, чтобы продемонстрировать, что требует конфигурация не была предназначена для решения таких проблем, как это.
Отлично, спасибо! Есть ли способ сделать это динамически или каждый пакет, который я использую, имеет индекс, который нужно определить здесь? –
Вам нужно сделать это для каждого модуля. Нет поддержки, чтобы включить это в какой-то динамический способ или использовать сопоставление шаблонов.'' * '', Который вы можете использовать в' map', - это действительно жесткое имя, которое означает «во всех модулях», и оно является значимым только как ключ самой «карты» и нигде больше. 'map' не понимал бы такие вещи, как' foo * ', и вы не могли бы сделать что-то вроде' map: {'*': {'*': '...'}} 'Второй' * 'будет интерпретироваться буквально RequireJS как «модуль с именем' * '», а не как «все модули». – Louis
Это не работает для меня, не знаю почему. Требовать игнорировать настройку карты – Tyguy7