2016-06-20 5 views
2

У меня возникло непоследовательное поведение относительно порядка объявления модуля для приложений 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 без необходимости вручную заказывать их по одному.

+0

О каких «ошибках зависимостей» вы говорите? Особенностью угловых модулей является то, что они не должны следовать конкретному порядку определения. Но модуль должен быть определен до того, как он будет использоваться с 'angular.module ('...')'. – estus

+0

Мой коллега сказал следующее: «Сначала я подумал, что проблема заключается в том, что мы включаем модуль в другие зависимости модулей, прежде чем объявлять его. Но после дальнейших исследований, которые кажутся несущественными, проблема заключается в том, что модуль (используется в функции) до того, как он будет объявлен, который выдает ошибку, чтобы этот модуль никогда не регистрировался, что приведет к сбою инжектора зависимостей, потому что модуль никогда не был найден ». –

+1

Модули JS могут автоматически поддерживать порядок загрузки файлов. Если «скрипт компиляции» - это просто Gulp concat, он делает это сложной задачей и требует явно указать порядок файлов. Если файлы загружены в алфавитном порядке, это не сработает.Я бы предложил придерживаться соответствующих инструментов (Webpack/Browserify) для этого. – estus

ответ

2

JS-модули могут поддерживать правильный порядок загрузки файлов автоматически. Если «скрипт компиляции» - это просто Gulp concat, он делает это сложной задачей и требует явно указать порядок файлов.

Если файлы загружены в алфавитном порядке, это не будет работать. Я бы предложил придерживаться соответствующих инструментов (Webpack/Browserify) для этого. Модули JS не заменяют угловые модули, но дополняют их.

И проблема перестает существовать даже для конкатенированной сборки, если приложение чрезвычайно модульное (по одному модулю на каждый файл/блок) и angular.module('...') запрещено использовать. Этот подход очень выгоден для разработки ООП и конвенции «один класс на файл».

Смежные вопросы