あなたができることは、縮小されたビルドで使用する薄い RequireJS shim を実装することです。使用したい RequireJS API の量にもよりますが、ごくわずかで済みます。簡単にするために、名前付きモジュールを使用することもできます。
たとえば、開発中に RequireJS を使用してモジュールをロードするとします。縮小ビルドを作成する場合は、縮小ファイルに単純なローダーを含めるだけです。
次のようなファイル app.js、foo.js、および bar.js がある場合:
//from app.js
define("app", ["foo", "bar"], function(foo, bar) {
return {
run: function() { alert(foo + bar); }
}
});
//from foo.js
define("foo", [], function() {
return "Hello ";
});
//from bar.js
define("bar", [], function() {
return "World!";
});
そして、それらすべてのファイルを一緒に縮小するとしましょう。ファイルの先頭に、次の shim を含めます。
//from your-require-shim.js
(function(exports) {
var modules = {};
var define = function(name, dependencies, func) {
modules[name] = {
name:name,
dependencies:dependencies,
func:func,
result:undefined
};
};
var require = function(name) {
var module = modules[name];
//if we have cached result -> return
if(module.result) { return module.result; }
var deps = [];
//resolve all dependencies
for(var i=0,len=module.dependencies.length;i<len;i++) {
var depName = module.dependencies[i];
var dep = modules[depName];
if(!dep.result) {
//resolve dependency
require(depName);
}
deps.push(dep.result);
}
module.result = module.func.apply(this, deps );
return module.result;
};
exports.require = require;
exports.define = define;
}(window));
そして app.js で定義されたモジュールを実行します
require("app").run();
このフィドルのように。
もちろん大まかなPoCですが、意味はわかると思います。