素晴らしい質問です。
チュートリアルとドキュメントがコードに対して「レイヤーごとのパッケージ」アプローチを取っているのは好きではありません。これはおそらく、概念を教える際の便宜のために行われていると思いますが、これは素晴らしいことですが、そのアプローチは現実世界での適用範囲が限られています。
パッケージごとの機能は、はるかに優れたアプローチです。
|- README
|- src/
|- app/
|- app.js
|- feature1/
|- feature2/
|- ...
|- vendor/
|- angular/
|- bootstrap/
|- ...
|- assets/
|- less/
|- index.html
内部src/app
では、作業しているサイトのセクション (メニューなど) とルート (製品リストや製品詳細など) に基づいてコンテンツをパッケージ化できます。それぞれは次のように宣言できます。
angular.module( 'products', [
'productCatalog',
...
])
また、各モジュールは独自のルートを持つことができます:
.config( [ '$routeProvider', function( $routeProvider ) {
$routeProvider.when( '/products', { ... } );
$routeProvider.when( '/products/:id', { ... } );
});
そしてコントローラーなど:
.controller( 'ProductListCtrl', [ '$scope', function ( $scope ) { ... } ]);
したがって、すべてが一緒に同じディレクトリにパッケージ化されます。また、すべてのコンポーネントを個別のファイルに配置し、ファイルごとに 1 つのモジュールを配置することもできます (必要に応じて、私は通常そうします)。トップレベルのアプリでは、依存関係を宣言するだけです。
angular.module( 'app', [
'products',
...
]);
また、汎用ディレクティブを単独でバンドルして、テストとドキュメントをまとめて保持することもできます。これらの各コンポーネントは、将来のプロジェクトでドラッグ アンド ドロップで再利用できます。
優れたリファレンス実装はangular-app です。見てみな!
更新:この回答以降、ngBoilerplateと呼ばれる AngularJS プロジェクトのキックスターター/テンプレートを開始して、これらの概念 (他の多くのベスト プラクティスの中でも) とそれらをサポートする洗練されたビルド システムをカプセル化しました。