С недавних пор приходится много писать на AngularJS. Проекты средние (2-4К строк). Встал вопрос о сборке проекта.
Для сборки используется GruntJS, на данный момент для себя использую следующий подход (позаимствовано и grunt-файла самого Angular:
каждая директива, контроллер, сервис и т.д. в отдельном файле. Все разнесено по каталогам (по модулям и по назначению). Есть файл AppFiles.json, который содержит список всех файлов разделенных на отдельные модули. Далее собираются модули, производится конкатенация и уже эти модули используются в индексе. Преимущества такого подхода очевидны: все легко найти, любой интересующий фильтр, сервис или директиву… Минусы так же очевидны — при изменении одного единственного файла приходится пересобирать весь проект. Задача пока решена через ватчеры, но мне не нравится. В среднем в проектах порядка 50-100 файлов, так что подключать каждый по отдельности так же не вариант. Думал написать мини-плагин, который будет собирать модули как-то так:
<!-- module:app dist:dist/someModule.js -->
<script src="src/someModule/someModule.js"></script>
<script src="src/someModule/services/TestService.js"></script>
...
<!-- endmodule-->
Можно было бы при сборке на основе этого проводить конкатенацию и заодно заменять весь этот блок подключением одного единственного js файла. А при разработке файлы бы подгружались подряд, так что при изменении какого-либо из них не нужно было бы пересобирать проект.
Но опять же это как-то слишком. Можно так же прописывать таргеты и описывать что и как должно собираться в grun-файле, но опять же сомнения гложут.
А как вы организуете работу с большим проектом? Фреймворк не столь важен.