言語での動作に似たオートローダーを探しています (例: http://php.net/manual/en/language.oop5.autoload.php )。ファイルを見つけるためのアルゴリズムを指定するだけで、アプリに自動的に読み込まれます。
私が最初に考えたのは、ディレクトリをスキャンしてインデックス ファイルを作成するビルド プロセスです。より良い方法はありますか?
言語での動作に似たオートローダーを探しています (例: http://php.net/manual/en/language.oop5.autoload.php )。ファイルを見つけるためのアルゴリズムを指定するだけで、アプリに自動的に読み込まれます。
私が最初に考えたのは、ディレクトリをスキャンしてインデックス ファイルを作成するビルド プロセスです。より良い方法はありますか?
browserify と node.js ビルド スクリプトを使用した私のソリューションは次のとおりですが、誰かがより良いソリューションを持っているかどうか知りたいです。
build.js:
var glob = require("glob");
var fs = require('fs');
var path = require('path');
function buildFile(directory, build_file, suffix) {
glob(directory, function(err, files) {
if (fs.existsSync(build_file)) {
fs.unlinkSync(build_file);
}
fs.appendFileSync(build_file, 'module.exports = {');
var controllers = {};
files.forEach(function (file) {
var key = path.basename(file, '.js')+suffix;
var value = "require('"+file+"')";
fs.appendFileSync(build_file, '\n '+key+': '+value + ',');
});
fs.appendFileSync(build_file, '\n}');
});
};
buildFile('./controllers/*.js' , './controllers.js', 'Controller');
buildFile('./routes/*.js' , './routes.js' , 'Route');
app.js:
var App = Ember.Application.create();
App.reopen(require('./controllers.js'));
App.reopen(require('./routes.js'));
routes.js (build.js からの出力例):
module.exports = {
ApplicationRoute: require('./routes/Application.js'),
IndexRoute: require('./routes/Index.js'),
RecoverRoute: require('./routes/Recover.js'),
RegisterRoute: require('./routes/Register.js'),
UsersRoute: require('./routes/Users.js'),
UsersNewRoute: require('./routes/UsersNew.js'),
ValidateRoute: require('./routes/Validate.js'),
}
Grunt.js を使用して、変更が発生したときに自動的に監視および再構築します。
Yeoman の ember generatorやember toolsのような既製のツールを使用できます。彼らは、プロジェクトのフォルダー構造について意見を持っています。