Angular 2에서 어떤 유형의 폴더 구조를 사용해야합니까?


129

저는 Angular 2에 대해 배우기 시작한 Angular 1 개발자입니다. 교육 자료에 따라 다양한 유형의 폴더 구조 방법이 있습니다. 아래에 각 항목을 나열하고 사용해야 할 사람들의 의견과 그 이유를 알고 싶습니다. 또한 나열되지 않은 방법이 있지만 더 잘 작동한다고 생각되면 자유롭게 나열하십시오.

이 모든 것을 살펴보면 방법 # 3은 Angular 1 앱을 수행하는 방식과 거의 같습니다.

방법 1 : 각도 2 빠른 시작

출처 : 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

@Bryan 답변에 감사드립니다. 입력 폴더의 이유는 무엇이라고 생각하십니까? 다른 두 가지 방법 중 어느 것도 그것을 사용하지 않습니다. 또한 주 파일에 대한 app.ts 대 main.ts에 대한 의견이 있습니까?
Marin Petkov

그래서 최근에 사용했던 시드는 여기 method3 인 스타일 가이드로갔습니다. 이것이 어떻게 확장되는지 혼란 스럽습니다. 왜 공유 폴더가 있습니까? 이 프레임 워크의 핵심이 아니므로 모든 구성 요소 / 지시문 / 파이프 / 서비스를 누구나 공유 할 수 있습니까? 지시문 / 파이프를 쉽게 찾는 방법을 이해하기가 어렵습니다. 스타일 가이드 형식을 사용하면 위치와 위치를 알 수 있어야합니다. 또는 모든 폴더에서 고객과 고객에게만 사용한다고 생각되는 서비스 하나만 찾으십시오. 다른 것들을 위해 필요합니다.
게리

1
@ 게리-그래서 시더의 공유 폴더를 가져 가면 공유의 모든 것을 동일한 폴더 수준 또는 하위 폴더에있는 클래스에서 사용할 수 있습니다. 어디서나 수업을 사용할 수 있습니까? 물론 새로운 사람이 내 코드를 볼 때 무슨 일이 일어나고 있는지 알 수 없습니다. 공유 된 서로 다른 구성 요소 / 폴더 사이에 사용되는 클래스를 배치하면 프로그래머가 여러 위치에서 사용됨을 명확하게 알 수 있습니다.
Marin Petkov

1
우리 팀은 최근이 의사 결정 과정을 통해 가서 매우 유용이 자원을 발견 npmjs.com/package/awesome-angular2
theUtherSide에게

답변:


117

공식적인 지침이 있습니다. mgechev/angular2-seed그것과도 일치했다. # 857 참조 .

각도 2 응용 구조

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


3
설명서에서 폴더 이름 앞에 "+"기호를 넣을 것을 제안하는 위치를 찾을 수 없습니다. 나는 그것이 무엇을 의미하는지 기억할 수 없습니다. 어떤 설명이 있습니까?
FacundoGFlores

index.ts파일 의 목적은 무엇 입니까? 라우팅을위한 것입니까?
Nicky

1
@FacundoGFlores는 구성 요소가 지연로드되었음을 의미합니다.
charlie_pl

2
index.ts 파일의 @Nicky 목적은 가져 오기를 단순화하는 것입니다. 각 파일에서 가져올 필요는 없지만 폴더에서 가져와야합니다. 예 : 'app / heroes / hero'의 import {Hero, Sword, Shield}
charlie_pl

1
위의 이미지는 지금까지 구식입니다. 예를 들어 "src"폴더는 표시되지 않으며 "app"폴더의 상위가됩니다.
Christoph

12

기능별로 프로젝트를 구성하는 것이 실용적인 방법이라고 생각합니다. 프로젝트를 확장 가능하고 유지 관리하기 쉽게 만듭니다. 그리고 그것은 프로젝트의 각 부분이 완전히 자율적으로 작동하게합니다. 아래에서이 구조에 대해 어떻게 생각하는지 알려주세요. ANGULAR TYPESCRIPT PROJECT STRUCTURE – 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내 프로젝트의 3, 지금 GitHub의에서. 환상적이야!!!
Savaratkar

Savaratkar의 답변이 여기에 가장 좋지만 js, css, images, fonts 등이 상주하는 자산 forlder를 만들어 더 나아가겠습니다.
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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.