Cấu trúc thư mục AngularJS [đã đóng]


186

Làm thế nào để bạn bố trí một cấu trúc thư mục cho một ứng dụng AngularJS lớn và có thể mở rộng?


Câu trả lời:


251

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

Sắp xếp theo loại

Ở bên trái, chúng tôi có các ứng dụng được sắp xếp theo loại. Không quá tệ cho các ứng dụng nhỏ hơn, nhưng ngay cả ở đây bạn có thể bắt đầu thấy khó khăn hơn để tìm thấy những gì bạn đang tìm kiếm. Khi tôi muốn tìm một khung nhìn cụ thể và bộ điều khiển của nó, chúng nằm trong các thư mục khác nhau. Có thể tốt để bắt đầu ở đây nếu bạn không chắc chắn cách tổ chức mã khác vì nó khá dễ dàng để chuyển sang kỹ thuật bên phải: cấu trúc theo tính năng.

Sắp xếp theo tính năng (ưu tiên)

Bên phải dự án được tổ chức theo tính năng. Tất cả các chế độ xem và trình điều khiển bố trí đều nằm trong thư mục bố cục, nội dung quản trị viên sẽ nằm trong thư mục quản trị viên và các dịch vụ được sử dụng bởi tất cả các khu vực trong thư mục dịch vụ. Ý tưởng ở đây là khi bạn đang tìm kiếm mã làm cho một tính năng hoạt động, nó được đặt ở một nơi. Các dịch vụ có một chút khác biệt vì chúng phục vụ các dịch vụ của nhiều người. Tôi thích điều này một khi ứng dụng của tôi bắt đầu hình thành vì nó trở nên dễ quản lý hơn đối với tôi.

Một bài đăng blog được viết tốt: http://www.johnpapa.net/angular-growth-structure/

Ứng dụng mẫu: https://github.com/angular-app/angular-app


22
bạn đang trả lời câu hỏi của riêng bạn ngay sau khi đăng nó?
Jakub

34
@Jakub Có một tùy chọn gọi là "trả lời câu hỏi của bạn đóng góp cho wiki" khi bạn tạo câu hỏi.
Michael J. Calkins

3
@MichaelCalkins, tôi thích ý tưởng này. Tôi cũng vừa mới xem một số bài viết trên youtube của bạn về góc cạnh, rất hay
Ronnie

5
@Ronnie Tôi chỉ nhớ đây là một trong những bước học tập khó nhất đối với AngularJS vì vậy hy vọng nó sẽ giúp mọi người. Tôi nghĩ rằng tôi đã trải qua như 10 bố cục khác nhau sau khi đọc blog và những gì không.
Michael J. Calkins

5
Dưới đây là trang thực hành tốt nhất dành cho cộng đồng angularJS. Đề xuất cấu trúc tệp của họ là sự kết hợp của cả hai ý tưởng của bạn trong hai ví dụ. Tôi thích ví dụ thứ hai tốt hơn vì nó nằm sau ý tưởng sắp xếp theo tính năng.
Giăng

32

Sau khi xây dựng một vài ứng dụng, một số trong Symfony-PHP, một số .NET MVC, một số ROR, tôi đã thấy rằng cách tốt nhất đối với tôi là sử dụng Yeoman.io với trình tạo AngularJS.

Đó là cấu trúc phổ biến và phổ biến nhất và được duy trì tốt nhất.

Và quan trọng nhất, bằng cách giữ cấu trúc đó, nó giúp bạn tách mã phía máy khách của bạn và làm cho nó không tin vào công nghệ phía máy chủ (tất cả các loại cấu trúc thư mục khác nhau và các công cụ tạo khuôn mẫu phía máy chủ khác nhau).

Bằng cách đó bạn có thể dễ dàng sao chép và sử dụng lại mã của bạn và của người khác.

Đây là trước khi xây dựng grunt: (nhưng sử dụng trình tạo yeoman, đừng chỉ tạo nó!)

/app
    /scripts
            /controllers
            /directives
            /services
            /filters
            app.js
    /views
    /styles
    /img
    /bower_components
    index.html
bower.json

Và sau khi xây dựng grunt (concat, uglify, rev, v.v ...):

    /scripts
        scripts.min.js (all JS concatenated, minified and grunt-rev)
        vendor.min.js  (all bower components concatenated, minified and grunt-rev)
    /views
    /styles
        mergedAndMinified.css  (grunt-cssmin)
    /images
    index.html  (grunt-htmlmin)

1
Nó nên ở đâu trong cấu hình của các tuyến mã? angular.module('myApp').config(function($routeProvider) { ... });
thể thao

1
+1 Ngoài ra, bạn có thể tùy chỉnh nơi yeoman đặt công cụ của bạn. IMHO, sắp xếp theo tính năng / mô-đun trong các ứng dụng lớn sẽ tốt hơn vì bạn có thể dễ dàng sử dụng lại một tính năng trong các ứng dụng khác.
Tivie

30

Tôi thích mục này về cấu trúc angularjs

Nó được viết bởi một trong những nhà phát triển angularjs, vì vậy sẽ cung cấp cho bạn cái nhìn sâu sắc

Đây là một đoạn trích:

root-app-folder
├── index.html
├── scripts
   ├── controllers
      └── main.js
      └── ...
   ├── directives
      └── myDirective.js
      └── ...
   ├── filters
      └── myFilter.js
      └── ...
   ├── services
      └── myService.js
      └── ...
   ├── vendor
      ├── angular.js
      ├── angular.min.js
      ├── es5-shim.min.js
      └── json3.min.js
   └── app.js
├── styles
   └── ...
└── views
    ├── main.html
    └── ...

1
Câu hỏi là về cấu trúc thư mục và mặc dù liên kết này rất thú vị theo những cách khác, nhưng nó không mang lại điều gì mới cho bảng cho câu hỏi này.
JohnC

Điều này được sử dụng bởi máy tạo góc Yeoman
EdgarT

Vì vậy, bạn đã tổ chức thư mục theo loại kịch bản.
Tudor

4

Ngoài ra còn có cách tiếp cận tổ chức các thư mục không phải theo cấu trúc của khung mà là cấu trúc của chức năng của ứng dụng. Có một ứng dụng khởi động github Angular / Express minh họa cho ứng dụng này được gọi là angular-app .


Đây thường là một cách tiếp cận tốt hơn cho các dự án rất lớn. Đáng buồn thay, chúng tôi vẫn bị mắc kẹt với các cấu trúc thư mục ... việc gắn thẻ sẽ tốt hơn vì vậy nó sẽ không quan trọng lắm và chúng tôi có thể có nhiều chế độ xem tùy thuộc vào các thẻ.
Barshe Roussy

3

Tôi đang sử dụng ứng dụng angularjs thứ ba của mình và cấu trúc thư mục đã được cải thiện mỗi lần cho đến nay. Tôi giữ cho tôi đơn giản ngay bây giờ.

index.html (or .php)
/resources
  /css
  /fonts
  /images
  /js
    /controllers
    /directives
    /filters
    /services
  /partials (views)

Tôi thấy rằng tốt cho các ứng dụng duy nhất. Tôi chưa thực sự có một dự án nào mà tôi cần nhiều.


Bạn sẽ gặp vấn đề trong việc duy trì và giới thiệu các tính năng mới sau này. Luôn luôn là một thực hành tốt để có một cấu trúc thư mục với các tính năng và thành phần liên quan đến tính năng đó trong thư mục của nó.
Jaseem Abbas

Tôi có đúng không khi nghĩ rằng Angular JS không có cấu trúc thư mục dự án hoặc mẫu dự án tiêu chuẩn, như dự án web asp.net hoặc ứng dụng máy tính để bàn windows?

1
@dotNetBlackBelt là chính xác. Không có tiêu chuẩn khi nói đến góc cạnh. Kể từ khi đăng bài này, tôi đã thay đổi cách thiết lập các thư mục của mình. Dự án cuối cùng của tôi Tôi đã đi ít nhiều câu trả lời hàng đầu của OP này là gì
Ronnie
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.