Que tipo de estrutura de pastas deve ser usada com o Angular 2?


129

Eu sou um desenvolvedor do Angular 1 que está começando a aprender sobre o Angular 2. Existem muitos tipos diferentes de métodos de estrutura de pastas, dependendo do material de treinamento. Vou listar cada um abaixo e gostaria de receber as opiniões das pessoas sobre as quais devo usar e por quê. Além disso, se houver um método que não esteja listado, mas você achar que ele funciona melhor, sinta-se à vontade para listá-lo também.

Ao olhar para todos eles, o método 3 é como eu estava fazendo meus aplicativos Angular 1.

Método 1: início rápido do angular2

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

Estrutura da pasta:

insira a descrição da imagem aqui

Método 2: ng-book2

Fonte: https://www.ng-book.com/2/ (tem que pagar para ver os arquivos)

Estrutura da pasta:

insira a descrição da imagem aqui

Método 3: mgechev / angular2-seed

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

Estrutura da pasta:

insira a descrição da imagem aqui


1
Eu sinto que o método 2 é o mais eficiente, porque todos os componentes, serviços etc. devem ser mantidos em pastas separadas para facilitar a localização de arquivos posteriormente. Este é o método mais eficiente em um aplicativo muito complexo.
Bryan

Obrigado pela resposta @Bryan, qual você acha que é o motivo da pasta de caracteres? Nenhum dos outros 2 métodos o utiliza. Além disso, você tem uma opinião sobre app.ts vs main.ts para o arquivo principal?
Marin Petkov 12/02

Portanto, a semente que eu tenho usado recentemente foi para o guia de estilo, que é o method3 aqui. Estou confuso como isso é dimensionado, e por que há uma pasta compartilhada? não é o objetivo dessa estrutura para que qualquer componente / diretiva / canal / serviço possa ser compartilhado por alguém? É difícil para mim entender como encontrar diretivas / tubulações com facilidade. Com o formato do guia de estilo, você só precisa saber onde está localizado ou procurar em todas as pastas o serviço que você pensou que usaria apenas para clientes e agora você preciso dele para outras coisas.
8556 Gary

1
@ Gary - Então, a minha opinião sobre a pasta compartilhada para a semeadora é que qualquer coisa em compartilhada pode ser usada em classes localizadas no mesmo nível de pasta ou em qualquer subpasta. Você pode usar alguma classe em qualquer lugar? Claro que você pode, mas quando alguém novo olhar para o seu código, ele não saberá o que está acontecendo. Colocando classes que são usadas entre diferentes componentes / pastas dentro de compartilhadas, isso permite que o programador saiba que é usado em vários locais.
Marin Petkov

1
Nossa equipe recentemente passou por esse processo de decisão e achou este recurso muito útil: npmjs.com/package/awesome-angular2
theUtherSide

Respostas:


117

A diretriz oficial está lá agora. mgechev/angular2-seedtambém tinha alinhamento. veja # 857 .

Estrutura de aplicação angular 2

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


3
Não consigo encontrar onde a documentação sugere colocar um sinal de "+" antes do nome da pasta. Não me lembro o que isso significa, existe alguma explicação?
FacundoGFlores

qual é o objetivo de cada index.tsarquivo? é destinado ao roteamento?
Nicky

1
@FacundoGFlores significa que os componentes são carregados com preguiça.
charlie_pl

2
@Nicky O objetivo dos arquivos index.ts é simplificar as importações, não é necessário importar de cada arquivo, mas da pasta: por exemplo, importar {Hero, Sword, Shield} de 'app / heroes / hero'
charlie_pl

1
A imagem acima está desatualizada até agora. Por exemplo, ele não mostra a pasta "src", que se torna o pai da pasta "app".
Christoph


11

Eu vou usar este. Muito semelhante ao terceiro mostrado por @Marin.

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

2
Esta resposta é antiga. Agora estou usando o mgechev/angular2-seedgithub em três dos meus projetos. É fantástico!!!
28416 Savaratkar

A resposta de Savaratkar é a melhor aqui, no entanto, irei mais além criando um ativo para onde js, css, imagens, fontes ... etc residem.
precisa saber é o seguinte

10

Então, depois de fazer mais investigações, acabei indo com uma versão ligeiramente revisada do método 3 (mgechev / angular2-seed).

Basicamente, mudei os componentes para um diretório de nível principal e, em seguida, cada recurso estará dentro dele.


2

Talvez algo como esta estrutura:

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

Ultimamente, tenho usado o ng cli e foi muito difícil encontrar uma boa maneira de estruturar meu código.

O mais eficiente que vi até agora vem do repositório mrholek ( https://github.com/mrholek/CoreUI-Angular ).

Essa estrutura de pastas permite manter seu projeto raiz limpo e estruturar seus componentes, evitando a convenção de nomenclatura redundante (às vezes inútil) do Guia de estilo oficial.

Além disso, essa estrutura é útil para agrupar a importação quando necessário e evitar 30 linhas de importação para um único arquivo.

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

Se o projeto for pequeno e permanecer pequeno, eu recomendaria estruturar por tipo (Método 2: ng-book2)

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

Se o projeto crescer, você deve estruturar suas pastas por domínio (Método 3: mgechev / angular2-seed)

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

Melhor seguir documentos oficiais.
https://angular.io/guide/styleguide#application-structure-and-ngmodules


0

Sugiro a seguinte estrutura, que pode violar algumas convenções existentes.

Eu estava me esforçando para reduzir a redundância de nomes no caminho e tentando manter os nomes curtos em geral.

Portanto, não há / app / components / home / home.component.ts | html | css.

Em vez disso, fica assim:

|-- 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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.