2016-06-20 3 views
2

AngularJSアプリケーションのモジュール宣言の順序が矛盾しています。私の現在のマシンでは、次の両方のモジュール宣言が機能しますが、同僚のマシンでは2番目の注文だけが依存エラーなしでコンパイルされます。AngularJSモジュール宣言注文

まず注文[ブレスまずここで

モジュールは親モジュールが宣言され、その後、依存関係は、その後、以下の宣言されている別名、息最初の方法で宣言されています。この宣言モジュールのこの方法は、Pythonモジュールがインタプリタによってロードされる方法、またはJavaクラスがそれらのインポートをロードする方法を思い出させます。

(function() { 
    angular.module('app.services', [ 
     'app.services.data', 
     'app.services.nav', 
     'app.services.session' 
    ]); 
})(); 

(function(){ 
    angular.module("app.services.data", []); 
})(); 

セカンドオーダ[深さ優先]ここ

モジュールはこれらのサブ依存関係があるように、以前のファイルに依存関係ツリーで深い依存関係を入れて、深さ優先の方法で宣言されています上位モジュールの依存関係としてロードされたときにすでに宣言されています。この方法は、JavaScript変数の順序宣言の典型です。変数Aは宣言される前にBを使用することはできません。

(function(){ 
    angular.module("app.services.data", []); 
})(); 

(function() { 
    angular.module('app.services', [ 
     'app.services.data', 
     'app.services.nav', 
     'app.services.session' 
    ]); 
})(); 

は、だから今、私の質問は:なぜこの動作はマシンからマシンに違うのですか?私の現在のマシンはIntel Core i5-3230Mプロセッサを搭載したUbuntu 14.04 64ビット版で、私のブラウザはChrome 51.03です。同僚のマシンはIntel Core i5-4570kとChrome 51.03を搭載したWindows 10マシンです。我々は、同じソースコード、同じコンパイルスクリプト(gulp)、同じ依存関係(angular^1.5.0)を使用しています。

gulpfileで適切な依存順序をどのように確保できるかについての考え方がある場合は、1つ1つ手作業で注文する必要はありません。

+0

どのような種類の「依存エラー」についてお話ししていますか?角度モジュールの特徴は、定義上の特定の順序に従うべきではないということです。しかし、モジュールは 'angular.module( '...')'で使用する前に定義する必要があります。 – estus

+0

私の同僚は次のように述べています。「最初に、モジュールを宣言する前に別のモジュールの依存関係にモジュールを含めることが問題だと思っていましたが、それ以上の研究の後では、このモジュールが決して登録されないようにエラーをスローする宣言される前に参照される(関数内で使用される)ため、モジュールが見つからなかったために依存インジェクタが失敗する原因になります。 –

+1

JSモジュールは適切なファイルロード順序を自動的に維持できます。 'compilation script'がGulp concatである場合、これは問題になり、ファイル順序を明示的に指定する必要があります。ファイルがアルファベット順にロードされている場合、これは機能しません。私はそれのための適切なツール(Webpack/Browserify)に固執することをお勧めします。 – estus

答えて

2

JSモジュールは、適切なファイル読み込み順序を自動的に維持できます。 'compilation script'がGulp concatである場合、これは問題になり、ファイル順序を明示的に指定する必要があります。

ファイルがアルファベット順にロードされている場合、これは機能しません。私はそれのための適切なツール(Webpack/Browserify)に固執することをお勧めします。 JSモジュールはAngularモジュールに代わるものではありませんが、補完します。

アプリが非常にモジュラー(各ファイル/ユニットごとに1つのモジュール)で、angular.module('...')の使用が禁止されている場合、連結ビルドでも問題は解決しなくなります。このアプローチは、OOP設計と「ファイルごとの1クラス」のコンベンションで非常に有益です。

関連する問題