Loại cấu trúc thư mục nào nên được sử dụng với Angular 2?


129

Tôi là một nhà phát triển Angular 1 đang bắt đầu tìm hiểu về Angular 2. Có rất nhiều loại phương pháp cấu trúc thư mục khác nhau tùy thuộc vào tài liệu đào tạo. Tôi sẽ liệt kê từng người dưới đây và tôi rất muốn biết ý kiến ​​của mọi người về việc tôi nên sử dụng cái gì và tại sao. Ngoài ra, nếu có một phương pháp không được liệt kê nhưng bạn cảm thấy rằng nó hoạt động tốt hơn, xin vui lòng liệt kê nó.

Bằng cách xem xét tất cả những điều này, phương pháp # 3 gần giống như cách tôi đang thực hiện các ứng dụng Angular 1 của mình.

Cách 1: angular2-quickstart

Nguồn: https://angular.io/guide/quickstart

Cấu trúc thư mục:

nhập mô tả hình ảnh ở đây

Cách 2: ng-book2

Nguồn: https://www.ng-book.com/2/ (phải trả tiền để xem các tập tin)

Cấu trúc thư mục:

nhập mô tả hình ảnh ở đây

Phương pháp 3: mgechev / angular2-seed

Nguồn: https://github.com/mgechev/angular2-seed

Cấu trúc thư mục:

nhập mô tả hình ảnh ở đây


1
Tôi cảm thấy Phương pháp 2 là hiệu quả nhất vì tất cả các thành phần, dịch vụ, v.v., nên được giữ trong các thư mục riêng biệt để dễ dàng tìm thấy các tệp sau này. Đây là phương pháp hiệu quả nhất trong một ứng dụng rất phức tạp.
Bryan

Cảm ơn câu trả lời @Bryan, bạn nghĩ lý do của thư mục đánh máy là gì? Không có 2 phương pháp nào khác sử dụng nó. Ngoài ra, bạn có ý kiến ​​gì về app.ts vs main.ts cho tệp chính không?
Marin Petkov

Vì vậy, hạt giống mà tôi đã sử dụng gần đây đã đi đến hướng dẫn về phong cách đó là phương thức 3 ở đây. Tôi bối rối làm thế nào quy mô này, và tại sao có một thư mục chia sẻ? không phải toàn bộ quan điểm của khung này sao cho bất kỳ thành phần / chỉ thị / đường ống / dịch vụ nào có thể được chia sẻ bởi bất kỳ ai? Thật khó cho tôi để hiểu làm thế nào để dễ dàng tìm thấy các chỉ thị / đường ống .. với định dạng hướng dẫn kiểu bạn phải biết vị trí của nó hoặc tìm trong mọi thư mục cho một dịch vụ mà bạn nghĩ bạn chỉ sử dụng cho khách hàng và bây giờ là bạn cần nó cho những thứ khác.
Gary

1
@Gary - Vì vậy, tôi đưa vào thư mục chia sẻ cho seeder là mọi thứ được chia sẻ đều có thể được sử dụng trong các lớp nằm ở cùng cấp thư mục hoặc bất kỳ thư mục con nào. Bạn có thể sử dụng bất kỳ lớp học bất cứ nơi nào? Chắc chắn bạn có thể nhưng sau đó khi ai đó mới xem mã của bạn, họ sẽ không biết chuyện gì đang xảy ra. Bằng cách đặt các lớp được sử dụng giữa các thành phần / thư mục khác nhau được chia sẻ, rõ ràng cho phép lập trình viên biết rằng nó được sử dụng ở nhiều nơi.
Marin Petkov

1
Nhóm của chúng tôi gần đây đã trải qua quá trình quyết định này và thấy tài nguyên này rất hữu ích: npmjs.com/package/awclaw-angular2
theUtherSide

Câu trả lời:


117

Các hướng dẫn chính thức là có ngay bây giờ. mgechev/angular2-seedđã liên kết với nó quá. xem # 857 .

Cấu trúc ứng dụng Angular 2

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


3
Tôi không thể tìm thấy tài liệu đề nghị đặt dấu "+" trước tên thư mục. Tôi không thể nhớ nó có nghĩa là gì, có lời giải thích nào không?
FacundoGFlores

mục đích của mỗi index.tstập tin là gì? nó có nghĩa là để định tuyến?
Nicky

1
@FacundoGFlores có nghĩa là các thành phần được tải lười biếng.
charlie_pl

2
@Nicky Mục đích cho các tệp index.ts là để đơn giản hóa việc nhập, bạn không phải nhập từ mỗi tệp, nhưng từ thư mục: ví dụ: nhập {Hero, Sword, Shield} từ 'app / hero / hero'
charlie_pl

1
Hình ảnh trên đã lỗi thời. Ví dụ, nó không hiển thị thư mục "src", mà trở thành cha mẹ của thư mục "ứng dụng".
Christoph

12

Tôi nghĩ rằng cấu trúc dự án theo chức năng là một phương pháp thực tế. Nó làm cho dự án có thể mở rộng và duy trì dễ dàng. Và nó làm cho mỗi phần của dự án hoạt động trong sự tự chủ hoàn toàn. Hãy cho tôi biết suy nghĩ của bạn về cấu trúc này bên dưới: CẤU TRÚC DỰ ÁN ANGULAR TYPESCRIPT - ANGULAR 2

nguồn: http://www.angulartypescript.com/angular-typescript-project-structure/


11

Tôi sẽ sử dụng cái này Rất giống với cái thứ ba được hiển thị bởi @Marin.

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

2
Câu trả lời này là cũ. Tôi đang sử dụng mgechev/angular2-seedtừ github, cho 3 dự án của tôi. Thật tuyệt vơi!!!
Savaratkar

Câu trả lời của Savaratkar là tốt nhất ở đây, tuy nhiên tôi sẽ đi xa hơn bằng cách tạo ra một trình quản lý tài sản nơi js, css, hình ảnh, phông chữ ... vv.
Abbeygoyso

10

Vì vậy, sau khi điều tra thêm, cuối cùng tôi đã đi đến một phiên bản sửa đổi một chút của Phương pháp 3 (mgechev / angular2-seed).

Về cơ bản tôi đã chuyển các thành phần thành một thư mục cấp chính và sau đó mỗi tính năng sẽ nằm trong đó.


2

Có lẽ một cái gì đó giống như cấu trúc này:

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

Gần đây tôi đã sử dụng ng cli và thật khó để tìm ra cách tốt để cấu trúc mã của tôi.

Công cụ hiệu quả nhất mà tôi thấy cho đến nay đến từ kho lưu trữ mrholek ( https://github.com/mrholek/CoreUI-Angular ).

Cấu trúc thư mục này cho phép bạn giữ cho dự án gốc của bạn sạch sẽ và cấu trúc các thành phần của bạn, nó tránh được quy ước đặt tên dự phòng (đôi khi vô dụng) của Hướng dẫn Phong cách chính thức.

Ngoài ra, cấu trúc này rất hữu ích để nhóm nhập khi cần và tránh có 30 dòng nhập cho một tệp.

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

Nếu dự án nhỏ và sẽ vẫn nhỏ, tôi khuyên bạn nên cấu trúc theo loại (Phương pháp 2: ng-book2)

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

Nếu dự án sẽ phát triển, bạn nên cấu trúc các thư mục của mình theo tên miền (Cách 3: mgechev / angular2-seed)

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

Tốt hơn để làm theo các tài liệu chính thức.
https://angular.io/guide/styleguide#application-structure-and-ngmodules


0

Tôi đề nghị cấu trúc sau, có thể vi phạm một số quy ước hiện có.

Tôi đã cố gắng để giảm sự dư thừa tên trong đường dẫn và cố gắng tiếp tục đặt tên ngắn.

Vì vậy, không có / ứng dụng / thành phần / home / home.component.ts | html | css.

Thay vào đó, nó trông như thế này:

|-- 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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.