好问题!
我不喜欢教程和文档对其代码采用“逐层打包”的方法。我认为这样做可能是为了方便教授概念,这很好,但这种方法在现实世界中的适用性有限。
按功能打包是一种更好的方法:
|- 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 ) { ... } ]);
所以所有的东西都打包在同一个目录中。您可以将所有组件放在单独的文件中,每个文件一个模块(如果您愿意;我通常这样做)。在您的顶级应用程序中,您只需声明您的依赖项:
angular.module( 'app', [
'products',
...
]);
您也可以单独捆绑通用指令,以将您的测试和文档放在一起 - 再次,按功能!这些组件中的每一个都可以在未来的项目中拖放重复使用。
一个很好的参考实现是angular-app。看看这个!
更新:自从有了这个答案,我开始了一个名为ngBoilerplate的 AngularJS 项目 kickstarter/模板来封装这些概念(以及许多其他最佳实践)和一个复杂的构建系统来支持它们。