Quel type de structure de dossier doit être utilisé avec Angular 2?


130

Je suis un développeur Angular 1 qui commence à en apprendre davantage sur Angular 2. Il existe de nombreux types de méthodes de structure de dossier en fonction du matériel de formation. Je vais énumérer chacun d'entre eux ci-dessous et j'aimerais avoir l'opinion des gens sur lesquels je devrais utiliser et pourquoi. De plus, s'il existe une méthode qui n'est pas répertoriée mais que vous pensez qu'elle fonctionne mieux, n'hésitez pas à la lister également.

En regardant tout cela, la méthode n ° 3 est à peu près la façon dont je faisais mes applications Angular 1.

Méthode 1: angular2-quickstart

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

Structure des dossiers:

entrez la description de l'image ici

Méthode 2: ng-book2

Source: https://www.ng-book.com/2/ (payer pour voir les fichiers)

Structure des dossiers:

entrez la description de l'image ici

Méthode 3: mgechev / angular2-seed

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

Structure des dossiers:

entrez la description de l'image ici


1
Je pense que la méthode 2 est la plus efficace car tous les composants, services, etc. doivent être conservés dans des dossiers séparés pour faciliter la recherche de fichiers ultérieurement. C'est la méthode la plus efficace dans une application très complexe.
Bryan

Merci pour la réponse @Bryan, quelle est selon vous la raison du dossier typings? Aucune des 2 autres méthodes ne l'utilise. Aussi, avez-vous une opinion sur app.ts vs main.ts pour le fichier principal?
Marin Petkov

Donc, la graine que j'ai utilisée récemment est allée au guide de style qui est method3 ici. Je ne sais pas comment cela évolue, et pourquoi y a-t-il un dossier partagé? L'intérêt de ce framework n'est-il pas que n'importe quel composant / directive / pipe / service puisse être partagé par n'importe qui? Il m'est difficile de comprendre comment trouver facilement des directives / tuyaux ... avec le format de guide de style, vous devez simplement savoir où il se trouve, ou rechercher dans chaque dossier le service que vous pensiez n'utiliser que pour les clients et maintenant vous besoin pour d'autres choses.
Gary

1
@Gary - Donc, mon point de vue sur le dossier partagé pour le semeur est que tout ce qui est partagé peut être utilisé dans des classes situées au même niveau de dossier ou dans n'importe quel sous-dossier. Pouvez-vous utiliser n'importe quelle classe n'importe où? Bien sûr, vous pouvez, mais lorsque quelqu'un de nouveau regarde votre code, il ne saura pas ce qui se passe. En plaçant des classes qui sont utilisées entre différents composants / dossiers à l'intérieur de Shared, cela permet clairement au programmeur de savoir qu'il est utilisé à plusieurs endroits.
Marin Petkov

1
Notre équipe a récemment parcouru ce processus de décision et a trouvé cette ressource très utile: npmjs.com/package/awesome-angular2
theUtherSide

Réponses:


117

La ligne directrice officielle est là maintenant. mgechev/angular2-seedavait l'alignement avec lui aussi. voir # 857 .

Structure d'application angulaire 2

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


3
Je ne trouve pas où la documentation suggère de mettre un signe «+» avant le nom du dossier. Je ne me souviens plus de ce que cela signifie, y a-t-il une explication?
FacundoGFlores

quel est le but de chaque index.tsfichier? est-il destiné au routage?
Nicky

1
@FacundoGFlores cela signifie que les composants sont chargés paresseusement.
charlie_pl

2
@Nicky Le but des fichiers index.ts est de simplifier les importations, vous n'avez pas besoin d'importer de chaque fichier, mais d'un dossier: par exemple importez {Hero, Sword, Shield} depuis 'app / heroes / hero'
charlie_pl

1
L'image ci-dessus est désormais obsolète. Par exemple, il n'affiche pas le dossier «src», qui devient le parent du dossier «app».
Christoph


11

Je vais utiliser celui-ci. Très similaire au troisième montré par @Marin.

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

2
Cette réponse est ancienne. J'utilise mgechev/angular2-seeddepuis github maintenant, pour 3 de mes projets. C'est fantastique!!!
Savaratkar

La réponse de Savaratkar est la meilleure ici, mais j'irai plus loin en créant un fichier actif où résident les js, css, images, polices ... etc.
vicgoyso

10

Donc, après avoir approfondi mes recherches, j'ai opté pour une version légèrement révisée de la méthode 3 (mgechev / angular2-seed).

J'ai essentiellement déplacé les composants pour en faire un répertoire de niveau principal, puis chaque fonctionnalité sera à l'intérieur.


2

Peut-être quelque chose comme cette structure:

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

J'utilise ng cli ces derniers temps, et il était vraiment difficile de trouver un bon moyen de structurer mon code.

Le plus efficace que j'ai vu jusqu'à présent provient du référentiel mrholek ( https://github.com/mrholek/CoreUI-Angular ).

Cette structure de dossiers vous permet de garder votre projet racine propre et de structurer vos composants, elle évite la convention de dénomination redondante (parfois inutile) du Guide de style officiel.

De plus, cette structure est utile pour regrouper l'importation lorsque cela est nécessaire et éviter d'avoir 30 lignes d'importation pour un seul fichier.

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

Si le projet est petit et le restera, je recommanderais de structurer par type (Méthode 2: ng-book2)

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

Si le projet se développe, vous devez structurer vos dossiers par domaine (Méthode 3: mgechev / angular2-seed)

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

Mieux vaut suivre les documents officiels.
https://angular.io/guide/styleguide#application-structure-and-ngmodules


0

Je suggère la structure suivante, qui pourrait violer certaines conventions existantes.

Je m'efforçais de réduire la redondance des noms dans le chemin et j'essayais de garder un nom court en général.

Il n'y a donc pas de / app / components / home / home.component.ts | html | css.

Au lieu de cela, cela ressemble à ceci:

|-- 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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.