推荐的可扩展的AngularJS项目结构?

我看过几个AngularJS项目模板:官方网站的种子项目 , Yeoman的生成项目和AngularFun 。

是否还有其他(非)自以为是的模板,我应该看看,或者你会为可扩展的AngularJS项目build议任何相关模式?

我的意思是可扩展的

  • 能够在自己的文件中分割控制器,指令,filter等;
  • 能够按需加载这些文件,而不是让浏览器加载所有内容;
  • 能够拥有共同的,跨项目的组件(例如通用指令,filter或服务)。

你可以看看Pawel Kozlowski和我在一起的演示应用程序: https : //github.com/angular-app/angular-app 。

它不提供任何按需加载文件的支持,但是您可以看到我们将模块分成多个独立的文件,并将testing设置为一stream的组件。 我们有一个构build过程(使用Grunt)连接(并且释放)js文件,并且可以运行单元和端到端testing。

我们select将我们的模块分为两组function应用领域和常见的交叉库代码,而不是简单的拆分指令,filter,服务等。 在function方面,我们可能有一些服务,指令,控制器和模板。

由于所有的相关项目都在一个地方,这使得对function区域的开发更容易。

该项目依靠一个简单的nodeJS服务器来提供文件(支持HTML5模式深层链接),并提供authentication和授权服务。

我会说,你所有的观点都可以很容易地实现,至less在没有对Angular进行任何修改的情况下。

  • 能够在自己的文件中分割控制器,指令,filter等;

这当然可以用基本的Angular完成,因为您可以根据需要包含尽可能多的控制器/服务脚本标记。 当然,它根本不是可扩展的,所以最好的select是使用AMD模块,比如RequireJS。 这是有这种configuration种子之一: https : //github.com/elsom25/angular-requirejs-html5boilerplate-seed

  • 能够按需加载这些文件,而不是让浏览器加载所有内容;

正如pkozlowski在评论中提出的那样,已经有了一些关于这个问题的描述,你会看到我也在努力解决这个问题,并且实际上有了一些结果。 我有一个使用RequireJS和路由configuration的parsing参数按需加载控制器,模板和指令的工作示例 。

  • 能够有共同的,跨项目的组件(例如通用指令,filter或服务)

解决了以前的问题后,可以使用RequireJs模块轻松完成。


我一直在想,开始agularjs-lazy-seed项目是不是一个好主意? 有什么需求吗? 我们甚至可以进一步把路由configuration移动到通常的configuration之外,假设你有一个views.json文件(理想情况下是一个json响应的服务)和你希望包含在你的应用程序中的视图:

{ "views" : { .... "account" : { "path" : "/account" // route path "name" : "Account", // view name "partial" : "views/account/account.html", // partial file "controller" : "account/main" // RequireJS module "directives" : [ "directives/version", "directives/menu" ] // directives used in the view } .... } } 

这样你可以:

  • 在分离的基础上开发视图,并基于此json引导来构build应用程序
  • 有一些共同的指令和组件
  • 在login后引导时,可以过滤用户可以看到的视图
  • ngView中的所有内容都将按需加载

当然,你的应用程序应该非常大,这样做所有这些额外的工作将是有道理的;)

你应该尝试ng-boilerplate。 更大的AngularJS项目最有希望的kickstart模板: http : //joshdmiller.github.io/ng-boilerplate/#/home

我同意其他人迄今为止所说的话, 它很容易分解成独立的模块,并使模块相互依赖定期AngularJS的东西。 然后你的JS代码可以分割成你喜欢的任何文件和目录树。

只是想我会提到我们正在做的基于AngularJS的开源hawtio项目。 我们已经采取模块化到一个极端:) hawtio使用插件 ,可以在运行的服务器上运行时发现(例如在运行时部署和取消部署UIfunction)。 所以基于一些REST查询或JMX检测,我们可以dynamic地或者移除插件。

例如这里是所有我们当前的默认插件

在布局方面,每个插件都有它自己的代码目录(js),html partials(html)以及其他任何东西(例如css / img目录),这使得事情变得简单和模块化。 例如这里有骆驼插件 ,它有自己的html,js和img文件夹。

然后,一个特定的插件定义自己的AngularJS模块,指令,filter,然后可以依赖于其他模块。

到目前为止,我们还没有为源文件提供非常多有用的命名约定 :)。 我们发现每个控制器写一个文件似乎是最简单的; 但除了fooPlugin.ts文件和helpers.ts文件(对于通用模块特定的辅助函数),我们还没有发现任何其他有意义的命名约定。

这个项目听起来很有希望http://vesparny.github.io/ng-kickstart

它使您能够按function拆分您的代码库,并保持代码的可重用性,以及为此自定义的Grunt任务实时重新加载。

该项目也是面向unit testing,并附带一个自定义“dist任务”,让您创build一个优化,生产就绪版本。

警告:无耻的插头。

你一定要检查一下generator-angular-xl 。

它特别针对创build大规模的AngularJS应用程序,通过对代码进行逻辑分组,脚手架unit testing,以及自动将您的js和css文件注入到index.html等等。它还可以通过为您的数据创build一个模拟后端来帮助您,在开发原型时也是一个不错的select。 它不会生成任何后端代码,所以您可以自由select任何您想要的后端技术。