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

Marin Petkov
la source
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

tsu1980
la source
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
Savaratkar
la source
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.

Marin Petkov
la source
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
Mile Mijatović
la source
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*
davidbonachera
la source
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

Andrew Luca
la source
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
yglodt
la source