Angular 2应该使用哪种类型的文件夹结构?


129

我是一位开始学习Angular 2的Angular 1开发人员。根据培训材料,有很多不同类型的文件夹结构方法。我将在下面列出每一个,我很想征询人们的意见,我应该使用它们以及为什么使用。另外,如果有未列出的方法,但您认为它会更好,请随时列出。

通过查看所有这些内容,方法3几乎就是我在做Angular 1应用程序时的方式。

方法1:angular2-quickstart

资料来源:https : //angular.io/guide/quickstart

资料夹结构:

在此处输入图片说明

方法2:ng-book2

来源:https//www.ng-book.com/2/(必须付费才能查看文件)

资料夹结构:

在此处输入图片说明

方法3:mgechev /角2种子

资料来源:https : //github.com/mgechev/angular2-seed

资料夹结构:

在此处输入图片说明


1
我觉得方法2是最有效的,因为所有组件,服务等都应保存在单独的文件夹中,以方便以后查找文件。这是非常复杂的应用程序中最有效的方法。
布赖恩

感谢@Bryan的回答,您认为类型文件夹的原因是什么?其他2种方法均未使用它。另外,您对主文件的app.ts和main.ts有意见吗?
马林·佩特科夫

因此,我最近一直在使用的种子转到了此处的method3的样式指南。我很困惑这是如何扩展的,为什么会有共享文件夹?这不是整个框架的重点,任何人都可以共享任何组件/指令/管道/服务吗?对于我来说,很难理解如何轻松地使用样式指南格式来查找指令/管道,您只需要知道它的位置,或者在每个文件夹中查找您认为仅用于客户的一项服务,现在需要其他东西。
加里

1
@Gary-因此,我对播种者的共享文件夹的看法是,共享中的任何内容都可以在位于同一文件夹级别或任何子文件夹的类中使用。您可以在任何地方使用任何课程吗?当然可以,但是当新来的人查看您的代码时,他们将不知道发生了什么。通过在共享内部不同组件/文件夹之间放置使用的类,程序员可以清楚地知道它已在多个地方使用。
马林·佩特科夫

1
我们的团队最近完成了这个决策过程,发现此资源非常有用:npmjs.com/package/awesome-angular2
theUtherSide

Answers:


117

现在有官方指南。mgechev/angular2-seed也与之保持一致。参见#857

Angular 2应用程序结构

https://angular.io/guide/styleguide#overall-structural-guidelines


3
我找不到文档建议在文件夹名称前加“ +”号的位置。我不记得这是什么意思,请问有什么解释吗?
FacundoGFlores

每个index.ts文件的目的是什么?它用于路由吗?
尼基,2013年

1
@FacundoGFlores表示组件是延迟加载的。
charlie_pl

2
@Nicky用于index.ts文件的目的是简化导入,您不必从每个文件中导入,而是从文件夹中导入:例如,从“ app / heroes / hero”中导入{Hero,Sword,Shield}
charlie_pl

1
上面的图像现在已经过时了。例如,它不显示“ src”文件夹,该文件夹成为“ app”文件夹的父文件夹。
Christoph'Apr


11

我将使用这个。与@Marin显示的第三位非常相似。

app
|
|___ images
|
|___ fonts
|
|___ css
|
|___ *main.ts*
|   
|___ *main.component.ts*
|
|___ *index.html*
|
|___ components
|   |
|   |___ shared
|   |
|   |___ home
|   |
|   |___ about
|   |
|   |___ product
|
|___ services
|
|___ structures

2
这个答案很旧。我现在mgechev/angular2-seed从github 使用3个项目。这是梦幻般的!!!
Savaratkar '16

Savaratkar的答案在这里是最好的,但是我将通过创建一个js,css,images,fonts ... etc所在的资产fordder来进一步说明。
vicgoyso

10

因此,在进行了更多调查之后,我最终使用了方法3(mgechev / angular2-seed)的略微修订版​​。

我基本上将组件移到了主目录,然后每个功能都在其中。


2

也许像这样的结构:

|-- app
     |-- modules
       |-- home
           |-- [+] components
           |-- pages
              |-- home
              |-- home.component.ts|html|scss|spec
           |-- home-routing.module.ts
           |-- home.module.ts
     |-- core
       |-- authentication
           |-- authentication.service.ts|spec.ts
       |-- footer
           |-- footer.component.ts|html|scss|spec.ts
       |-- guards
           |-- auth.guard.ts
           |-- no-auth-guard.ts
           |-- admin-guard.ts 
       |-- http
           |-- user
               |-- user.service.ts|spec.ts
           |-- api.service.ts|spec.ts
       |-- interceptors
           |-- api-prefix.interceptor.ts
           |-- error-handler.interceptor.ts
           |-- http.token.interceptor.ts
       |-- mocks
           |-- user.mock.ts
       |-- services
           |-- srv1.service.ts|spec.ts
           |-- srv2.service.ts|spec.ts
       |-- header
           |-- header.component.ts|html|scss|spec.ts
       |-- core.module.ts
       |-- ensureModuleLoadedOnceGuard.ts
       |-- logger.service.ts
     |-- shared
          |-- components
              |-- loader
                  |-- loader.component.ts|html|scss|spec.ts
          |-- buttons
              |-- favorite-button
                  |-- favorite-button.component.ts|html|scss|spec.ts
              |-- collapse-button
                  |-- collapse-button.component.ts|html|scss|spec.ts
          |-- directives
              |-- auth.directive.ts|spec.ts
          |-- pipes
              |-- capitalize.pipe.ts
              |-- safe.pipe.ts
     |-- configs
         |-- app-settings.config.ts
         |-- dt-norwegian.config.ts
     |-- scss
          |-- [+] partials
          |-- _base.scss
          |-- styles.scss
     |-- assets

0

我最近一直在使用ng cli,因此很难找到一种结构化代码的好方法。

到目前为止,我见过的最高效的代码来自mrholek存储库(https://github.com/mrholek/CoreUI-Angular)。

这种文件夹结构使您可以保持根项目的整洁并结构化组件,避免了官方“样式指南”的冗余(有时无用)命名约定。

而且,这种结构在需要时可以对导入进行分组,并且避免单个文件有30行导入。

src
|
|___ app
|
|   |___ components/shared
|   |   |___ header
|   |
|   |___ containers/layout
|   |   |___ layout1
|   |
|   |___ directives
|   |   |___ sidebar
|   |
|   |___ services
|   |   |___ *user.service.ts* 
|   | 
|   |___ guards
|   |   |___ *auth.guard.ts* 
|   |
|   |___ views
|   |   |___ about  
|   |
|   |___ *app.component.ts*
|   |
|   |___ *app.module.ts*
|   |
|   |___ *app.routing.ts*
|
|___ assets
|
|___ environments
|
|___ img
|   
|___ scss
|
|___ *index.html*
|
|___ *main.ts*

0

如果项目很小并且会很小,我建议按类型进行结构化(方法2:ng-book2)

app
|- components
|  |- hero
|  |- hero-list
|  |- villain
|  |- ...
|- services
|  |- hero.service.ts
|  |- ...
|- utils
|- shared

如果项目将增长,则应按域构建文件夹(方法3:mgechev / angular2-seed)

app
|- heroes
|  |- hero
|  |- hero-list
|  |- hero.service.ts
|- villains
|  |- villain
|  |- ...
|- utils
|- shared

最好遵循官方文档。
https://angular.io/guide/styleguide#application-structure-and-ngmodules


0

我建议采用以下结构,这可能会违反一些现有约定。

我一直在努力减少路径中的名称冗余,并尝试使命名通常保持简短。

因此,没有/app/components/home/home.component.ts|html|css。

相反,它看起来像这样:

|-- app
    |-- users
        |-- list.ts|html|css
        |-- form.ts|html|css
    |-- cars
        |-- list.ts|html|css
        |-- form.ts|html|css
        |-- configurator.ts|html|css
    |-- app.component.ts|html|css
    |-- app.module.ts
    |-- user.service.ts
    |-- car.service.ts
|-- index.html
|-- main.ts
|-- style.css
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.