2013-08-01 3 views
1

Я ищу автозагрузчик, аналогичный тому, как они работают на языках (например, http://php.net/manual/en/language.oop5.autoload.php). Я просто указываю алгоритм поиска файла и автоматически загружаюсь в приложение.Класс автозагрузчика в Ember.js?

Мое первоначальное мышление - это процесс сборки, который сканирует каталоги и создает индексный файл. Есть ли способ лучше?

+0

Какая структура на стороне сервера вы используете? – Polaris878

+0

Я использую Express.js –

ответ

1

Можно использовать готовый инструмент, например Yeoman's ember generator или ember tools. Они усомнились в структуре папок проекта.

+0

Я закончил тем, что использовал ember-tools. –

1

Вы, вероятно, хотите использовать что-то вроде RequireJS: http://requirejs.org/

RequireJS позволит указать зависимости, которые будут загружаться по мере необходимости. Вы также можете запустить RequireJS optimizer, чтобы скомпилировать ваши шаблоны и JavaScript в один файл для развертывания на ваших производственных серверах.

+0

Могу ли я указать весь каталог как зависимость? –

+0

Вы хотите думать с точки зрения модулей ... вы обычно не можете просто сказать «включить весь этот каталог», поскольку javascript, как правило, нужно загружать в определенном порядке. Поэтому вместо этого вы хотите создать модуль, содержащий все файлы, необходимые для функции. Затем в другом месте вашего приложения вы можете включить этот модуль, а не все отдельные файлы. Надеюсь, это имеет смысл. – Polaris878

+0

Я понимаю это, но суть вопроса заключается в том, чтобы указать эти зависимости более динамично, а не утомительно управлять списком. –

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 для автоматического просмотра и восстановления при возникновении изменений.