Какой тип структуры папок следует использовать в Angular 2?


131

Я разработчик Angular 1, который начинает изучать Angular 2. В зависимости от учебного материала существует множество различных типов методов структуры папок. Я собираюсь перечислить каждый из них ниже, и мне хотелось бы узнать мнение людей о том, что мне следует использовать и почему. Кроме того, если есть метод, которого нет в списке, но вы чувствуете, что он работает лучше, не стесняйтесь перечислить и его.

Глядя на все это, метод №3 в значительной степени похож на то, как я делал свои приложения Angular 1.

Метод 1: angular2-quickstart

Источник: https://angular.io/guide/quickstart

Структура папки:

введите описание изображения здесь

Метод 2: ng-book2

Источник: https://www.ng-book.com/2/ (чтобы увидеть файлы, нужно заплатить)

Структура папки:

введите описание изображения здесь

Метод 3: mgechev / angular2-seed

Источник: https://github.com/mgechev/angular2-seed

Структура папки:

введите описание изображения здесь


1
Я считаю, что метод 2 является наиболее эффективным, поскольку все компоненты, службы и т. Д. Должны храниться в отдельных папках, чтобы облегчить поиск файлов позже. Это наиболее эффективный метод в очень сложном приложении.
Брайан,

Спасибо за ответ @Bryan, как вы думаете, в чем причина папки с типами? Ни один из двух других методов не использует его. Кроме того, у вас есть мнение по поводу app.ts и main.ts для основного файла?
Марин Петков

Итак, семя, которое я недавно использовал, попало в руководство по стилю, которое здесь - method3. Я не понимаю, как это масштабируется, и почему есть общая папка? разве не вся суть этой структуры, чтобы любой компонент / директива / канал / служба мог использоваться кем угодно? Мне сложно понять, как легко найти директивы / каналы ... с форматом руководства по стилю вы должны просто знать, где он находится, или искать в каждой папке ту единственную услугу, которую, как вы думали, вы будете использовать только для клиентов, а теперь вы он нужен для других вещей.
Гэри

1
@Gary - Итак, я считаю, что общая папка для сидера состоит в том, что все, что находится в общем доступе, можно использовать в классах, расположенных на том же уровне папки, или в любых подпапках. Можете ли вы использовать любой класс где угодно? Конечно, можете, но тогда, когда кто-то новый посмотрит на ваш код, он не узнает, что происходит. Помещая классы, которые используются между различными компонентами / папками внутри общего доступа, он ясно дает программисту понять, что он используется в нескольких местах.
Марин Петков

1
Наша команда недавно прошла этот процесс принятия решения и нашла этот ресурс очень полезным: npmjs.com/package/awesome-angular2
theUtherSide

Ответы:


117

Официальное руководство уже есть. mgechev/angular2-seedбыл согласован с ним тоже. см. №857 .

Структура приложения Angular 2

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


3
Не могу найти, где в документации предлагается поставить перед именем папки знак "+". Не могу вспомнить, что это значит, есть ли объяснение?
FacundoGFlores

какова цель каждого index.tsфайла? он предназначен для маршрутизации?
Nicky

1
@FacundoGFlores означает, что компоненты загружаются лениво.
charlie_pl

2
@Nicky Цель файлов index.ts - упростить импорт, вам нужно импортировать не из каждого файла, а из папки: например, импорт {Hero, Sword, Shield} из 'app / heroes / hero'
charlie_pl

1
Изображение выше уже устарело. Например, не отображается папка «src», которая становится родительской для папки «app».
Кристоф

12

Я считаю, что структурирование проекта по функциональности - это практический метод. Это делает проект легко масштабируемым и поддерживаемым. И это позволяет каждой части проекта работать в полной автономии. Дайте мне знать, что вы думаете об этой структуре ниже: УГЛОВОЙ ТИП СТРУКТУРЫ ПРОЕКТА - УГЛОВОЙ 2

источник: http://www.angulartypescript.com/angular-typescript-project-structure/


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

Ответ Савараткара здесь лучше всего, однако я пойду дальше и создам форльдер ресурсов, в котором находятся js, css, изображения, шрифты и т. Д.
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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.