¿Qué tipo de estructura de carpetas se debe usar con Angular 2?

129

Soy un desarrollador de Angular 1 que está comenzando a aprender sobre Angular 2. Existen muchos tipos diferentes de métodos de estructura de carpetas según el material de capacitación. Voy a enumerar cada uno a continuación y me encantaría conocer las opiniones de las personas sobre cuáles debo usar y por qué. Además, si hay un método que no aparece en la lista pero cree que funciona mejor, no dude en incluirlo también.

Al observar todo esto, el método # 3 es más o menos como estaba haciendo mis aplicaciones Angular 1.

Método 1: angular2-inicio rápido

Fuente: https://angular.io/guide/quickstart

Estructura de carpeta:

ingrese la descripción de la imagen aquí

Método 2: ng-book2

Fuente: https://www.ng-book.com/2/ (tiene que pagar para ver los archivos)

Estructura de carpeta:

ingrese la descripción de la imagen aquí

Método 3: mgechev / angular2-seed

Fuente: https://github.com/mgechev/angular2-seed

Estructura de carpeta:

ingrese la descripción de la imagen aquí

Marin Petkov
fuente
1
Creo que el Método 2 es el más eficiente porque todos los componentes, servicios, etc., deben mantenerse en carpetas separadas para que sea más fácil encontrar archivos más tarde. Este es el método más eficiente en una aplicación muy compleja.
Bryan
Gracias por la respuesta @Bryan, ¿cuál crees que es la razón de la carpeta de tipings? Ninguno de los otros 2 métodos lo usa. Además, ¿tiene una opinión sobre app.ts vs main.ts para el archivo principal?
Marin Petkov
Entonces, la semilla que he estado usando recientemente fue a la guía de estilo que es el método 3 aquí. Estoy confundido sobre cómo se escala, y ¿por qué hay una carpeta compartida? ¿No es el objetivo completo de este marco para que cualquier componente / directiva / tubería / servicio pueda ser compartido por cualquier persona? Es difícil para mí entender cómo encontrar fácilmente directivas / tuberías ... con el formato de guía de estilo, solo tiene que saber dónde está ubicado, o buscar en cada carpeta ese servicio que pensó que solo usaría para los clientes y ahora usted Lo necesito para otras cosas.
Gary
1
@Gary - Entonces, mi opinión sobre la carpeta compartida para la sembradora es que todo lo compartido puede usarse en clases que se encuentran en el mismo nivel de carpeta o en cualquier subcarpeta. ¿Puedes usar cualquier clase en cualquier lugar? Claro que puedes, pero cuando alguien nuevo vea tu código no sabrá lo que está sucediendo. Al colocar clases que se usan entre diferentes componentes / carpetas dentro de compartidas, claramente le permite al programador saber que se usa en varios lugares.
Marin Petkov
1
Nuestro equipo recientemente pasó por este proceso de decisión y encontró este recurso muy útil: npmjs.com/package/awesome-angular2
theUtherSide

Respuestas:

117

La directriz oficial está ahí ahora. mgechev/angular2-seedtenía alineación con eso también. ver # 857 .

Estructura de aplicación angular 2

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

tsu1980
fuente
3
No puedo encontrar dónde la documentación sugiere poner un signo "+" antes del nombre de la carpeta. No puedo recordar qué significa, ¿hay alguna explicación?
FacundoGFlores
¿Cuál es el propósito de cada index.tsarchivo? ¿Está destinado al enrutamiento?
Nicky
1
@FacundoGFlores significa que los componentes tienen carga lenta.
charlie_pl
2
@Nicky El propósito de los archivos index.ts es simplificar las importaciones, no tiene que importar desde cada archivo, sino desde la carpeta: por ejemplo, importar {Hero, Sword, Shield} desde 'app / heroes / hero'
charlie_pl
1
La imagen de arriba está desactualizada por ahora. Por ejemplo, no muestra la carpeta "src", que se convierte en la principal de la carpeta "app".
Christoph
11

Voy a usar este. Muy similar al tercero mostrado por @Marin.

app
|
|___ images
|
|___ fonts
|
|___ css
|
|___ *main.ts*
|   
|___ *main.component.ts*
|
|___ *index.html*
|
|___ components
|   |
|   |___ shared
|   |
|   |___ home
|   |
|   |___ about
|   |
|   |___ product
|
|___ services
|
|___ structures
Savaratkar
fuente
2
Esta respuesta es vieja. Estoy usando mgechev/angular2-seedde github ahora, para 3 de mis proyectos. ¡¡¡Es fantástico!!!
Savaratkar
La respuesta de Savaratkar es la mejor aquí, sin embargo, iré más allá creando un activo para donde residen los js, css, imágenes, fuentes ... etc.
vicgoyso
10

Entonces, después de investigar más, terminé con una versión ligeramente revisada del Método 3 (mgechev / angular2-seed).

Básicamente moví los componentes para ser un directorio de nivel principal y luego cada característica estará dentro de él.

Marin Petkov
fuente
2

Quizás algo como esta estructura:

|-- 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
Mile Mijatović
fuente
0

He estado usando ng cli últimamente, y fue realmente difícil encontrar una buena forma de estructurar mi código.

El más eficiente que he visto hasta ahora proviene del repositorio mrholek ( https://github.com/mrholek/CoreUI-Angular ).

Esta estructura de carpetas le permite mantener limpio su proyecto raíz y estructurar sus componentes, evita la convención de nomenclatura redundante (a veces inútil) de la Guía de estilo oficial.

Además, esta estructura es útil para agrupar la importación cuando sea necesario y evitar tener 30 líneas de importación para un solo archivo.

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*
davidbonachera
fuente
0

Si el proyecto es pequeño y seguirá siendo pequeño, recomendaría estructurar por tipo (Método 2: ng-book2)

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

Si el proyecto crecerá, debe estructurar sus carpetas por dominio (Método 3: mgechev / angular2-seed)

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

Es mejor seguir los documentos oficiales.
https://angular.io/guide/styleguide#application-structure-and-ngmodules

Andrew Luca
fuente
0

Sugiero la siguiente estructura, que podría violar algunas convenciones existentes.

Me estaba esforzando por reducir la redundancia de nombres en el camino, y tratando de mantener los nombres cortos en general.

Entonces no hay / app / components / home / home.component.ts | html | css.

En cambio, se ve así:

|-- 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
yglodt
fuente