У меня возникло непоследовательное поведение относительно порядка объявления модуля для приложений AngularJS. На моем текущем компьютере работают оба следующих порядка декларации модуля, а на машине моего коллеги только второй порядок компилируется без ошибок зависимостей.Заявка на регистрацию модуля AngularJS
первого порядок [Дыхание первого]
Здесь модули объявляются в дыхании первой моде, он же родительский модуль объявляется, а затем зависимости объявляются впоследствии ниже. Этот способ объявления модуля напоминает способ загрузки модулей Python интерпретатором или того, как классы Java загружают свой импорт.
(function() {
angular.module('app.services', [
'app.services.data',
'app.services.nav',
'app.services.session'
]);
})();
(function(){
angular.module("app.services.data", []);
})();
второго порядка [Depth First]
Здесь модули объявлены в глубине первой моды, положив зависимостей, которые глубже в дереве зависимостей ранее в файле, так что эти суб зависимостей уже объявлены, когда они загружаются как зависимости для модуля более высокого уровня. Этот способ типичен для объявления переменной порядка JavaScript. Переменная A не может использовать B до ее объявления.
(function(){
angular.module("app.services.data", []);
})();
(function() {
angular.module('app.services', [
'app.services.data',
'app.services.nav',
'app.services.session'
]);
})();
Так что теперь мой вопрос: Почему это поведение отличается от машины к машине? Моя нынешняя машина находится под Ubuntu 14.04 64 бит с процессором Intel Core i5-3230M, а мой браузер - Chrome 51.03, а машина моего коллеги - это машина с Windows 10 с процессором Intel Core i5-4570k и Chrome 51.03 в качестве браузера. Мы используем один и тот же исходный код, тот же сценарий компиляции (gulp) и те же зависимости (угловой^1.5.0).
Бонусные баллы, если у вас также есть идея, как я могу обеспечить правильный порядок зависимостей в моем gulpfile без необходимости вручную заказывать их по одному.
О каких «ошибках зависимостей» вы говорите? Особенностью угловых модулей является то, что они не должны следовать конкретному порядку определения. Но модуль должен быть определен до того, как он будет использоваться с 'angular.module ('...')'. – estus
Мой коллега сказал следующее: «Сначала я подумал, что проблема заключается в том, что мы включаем модуль в другие зависимости модулей, прежде чем объявлять его. Но после дальнейших исследований, которые кажутся несущественными, проблема заключается в том, что модуль (используется в функции) до того, как он будет объявлен, который выдает ошибку, чтобы этот модуль никогда не регистрировался, что приведет к сбою инжектора зависимостей, потому что модуль никогда не был найден ». –
Модули JS могут автоматически поддерживать порядок загрузки файлов. Если «скрипт компиляции» - это просто Gulp concat, он делает это сложной задачей и требует явно указать порядок файлов. Если файлы загружены в алфавитном порядке, это не сработает.Я бы предложил придерживаться соответствующих инструментов (Webpack/Browserify) для этого. – estus