Я использую grunt для конкатенации файлов .js
для моего приложения Angular.
Я только что прошел и прибрал кодовую базу, чтобы следить за обсуждаемыми соглашениями здесь, в частности, группируя мой код в небольшие модули, которые представляют функции.
Однако я обнаружил, что порядок конкатенации, похоже, нарушает приложение, если модуль потребляется до его объявления.
например:
|-- src/
| |-- app/
| | |-- userProfile/
| | | | userProfile.js
| | | |-- deposits/
| | | | |-- depositFormCtrl.js
Где:
// userProfile.js
var userProfile = angular.module('userProfile',[])
// depositFormCtrl.js
angular.module('userProfile')
.controller('DepositFormCtrl', function($scope) {...});
Когда grunt выполняет конкатенацию, depositFormCtrl.js
появляется перед userProfile.js
. Это заставляет приложение выкидывать ошибку, жалуясь:
Неподготовленная ошибка: нет модуля: userProfile
Я вижу много разговоров о возможностях использования RequireJS/AMD для управления порядком загрузки модулей. Однако часто он утверждал, что это слишком сложно/не требуется, как Angular обрабатывает это для вас.
Например: Брайан Форд команды Angular упоминается:
Мой личный подход заключается в том, что RequireJS делает слишком много; единственной особенностью системы AngularJS DI является отсутствие асинхронной загрузки.
Он также заявил в другом месте, что он не рекомендует RequireJS с Angular.
Я также упоминал об использовании angular-loader.js, как показано на начальный проект. Однако, насколько я понимаю, (там небольшая официальная документация), загрузчик стремится решить проблему загрузки модулей из строя, а не ссылки на них перед использованием.
Добавление angular -loader.js в мой проект не помогло решить проблему.
Есть ли объявление, которое я должен использовать, которое предотвращает ошибки, которые у меня возникают?
Каков правильный способ объявления модулей и контроллеров, чтобы файлы заказов были объединены, не влияет на код во время выполнения?