Який тип структури папки слід використовувати з Angular 2?


129

Я розробник 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, на вашу думку, причина в папці "typping"? Жоден з двох інших методів не використовує його. Також у вас є думка щодо app.ts vs main.ts для основного файлу?
Марин Петков

Тож насіння, яке я нещодавно використовував, перейшло до посібника зі стилів, який є тут методом 3. Я розгублений, як це масштабує, і чому існує спільна папка? Хіба не вся суть цієї рамки, щоб будь-яким компонентом / директивою / трубою / послугою хтось міг поділитися? Мені важко зрозуміти, як легко знайти директиви / труби. За допомогою формату керівництва зі стилем ви повинні просто знати, де він знаходиться, або шукати в кожній папці для тієї послуги, яку ви думали, що будете використовувати лише для клієнтів, а тепер ви це потрібно для інших речей.
Гері

1
@Gary - Тож я хочу взяти спільну папку для сівалки, що будь-що в спільному можна використовувати в класах, розташованих на одному рівні папок або будь-яких підпапок. Чи можна використовувати будь-який клас де завгодно? Звичайно, ви можете, але тоді, коли хтось новий погляне на ваш код, він не знатиме, що відбувається. Розміщуючи класи, які використовуються між різними компонентами / папками всередині загального доступу, це чітко дає зрозуміти програмісту, що він використовується в декількох місцях.
Марин Петков

1
Нещодавно наша команда пройшла цей процес прийняття рішень і вважала
theUtherSide

Відповіді:


117

Офіційна настанова існує зараз. mgechev/angular2-seedтеж погодився з цим. див. # 857 .

Кутова структура застосування 2

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


3
Я не можу знайти, де в документації пропонується поставити знак "+" перед назвою папки. Я не можу пригадати, що це означає, чи є якесь пояснення?
FacundoGFlores

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

1
@FacundoGFlores це означає, що компоненти ледаче завантажені.
charlie_pl

2
@Nicky Призначення файлів index.ts полягає у спрощенні імпорту, вам не потрібно імпортувати з кожного файлу, а з папки: наприклад, імпортувати {Hero, Sword, Shield} з 'app / Hero / hero'
charlie_pl

1
Зображення вище застаріло. Наприклад, він не показує папку "src", яка стає батьківською папкою "app".
Крістоф

12

Я думаю, що структурування проекту за функціональними можливостями - це практичний метод. Це робить проект масштабованим і легко ремонтом. І це робить кожну частину проекту повною самостійністю. Дайте мені знати, що ви думаєте про цю структуру нижче: СТРУКТУРА АНГУЛЬНОГО ТИПИСКРИПТУ - ANGULAR 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 проектів. Це фантастично!!!
Савараткар

Відповідь Савараткара найкраще тут, однак я піду далі, створивши програму для активатора, де знаходяться 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 / компоненти / 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.