1

言語での動作に似たオートローダーを探しています (例: http://php.net/manual/en/language.oop5.autoload.php )。ファイルを見つけるためのアルゴリズムを指定するだけで、アプリに自動的に読み込まれます。

私が最初に考えたのは、ディレクトリをスキャンしてインデックス ファイルを作成するビルド プロセスです。より良い方法はありますか?

4

3 に答える 3

2

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 を使用して、変更が発生したときに自動的に監視および再構築します。

于 2013-08-01T19:54:04.047 に答える
1

Yeoman の ember generatorember toolsのような既製のツールを使用できます。彼らは、プロジェクトのフォルダー構造について意見を持っています。

于 2013-08-02T16:37:25.337 に答える