我不喜欢
map
中的配置。我实现这个最简单的方法是编写一个用于require的插件。
让我们把这个插件命名为
mod
,在使用时它可以被称为
mod!module/someModule
,你也可以根据自己的需要将其称为
index
,例如
index!module/someModule
。
define(function(require, exports, module) {
var someModule = require('mod!module/someModule');
module.exports = { .. };
});
假设您在 require 的配置中设置了
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',
'mod': 'app/plugins/mod.js'
}
});
要了解如何编写插件的所有方面,请阅读
requirejs.org上的文档。最简单的版本是只需重写您尝试访问的“模块”的
name
并将其传递回
load
。
app/plugins/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
本身作为键时才有意义,在其他任何地方都不是。map
不会理解像foo*
这样的东西,也不能像map:{ '*': { '*': '...' } }
这样做。第二个*
将被 RequireJS 解释为“名为*
的模块”,而不是“所有模块”。 - Louis