AngularJS Folder Structure [chiuso]


186

Come si layout una struttura di cartelle per un'applicazione AngularJS grande e scalabile?


Risposte:


251

inserisci qui la descrizione dell'immagine

Ordina per tipo

Sulla sinistra abbiamo l'app organizzata per tipo. Non male per le app più piccole, ma anche qui puoi iniziare a vedere che diventa più difficile trovare quello che stai cercando. Quando voglio trovare una vista specifica e il suo controller, sono in diverse cartelle. Può essere utile iniziare qui se non si è sicuri di come organizzare il codice in quanto è abbastanza semplice passare alla tecnica a destra: struttura per caratteristica.

Ordina per funzione (preferito)

A destra il progetto è organizzato per caratteristica. Tutte le viste e i controller del layout vanno nella cartella del layout, il contenuto dell'amministratore va nella cartella dell'amministratore e i servizi utilizzati da tutte le aree vanno nella cartella dei servizi. L'idea qui è che quando stai cercando il codice che fa funzionare una funzione, si trova in un posto. I servizi sono leggermente diversi in quanto "supportano" molte funzionalità. Mi piace una volta che la mia app inizia a prendere forma in quanto diventa molto più facile da gestire per me.

Un post sul blog ben scritto: http://www.johnpapa.net/angular-growth-structure/

App di esempio: https://github.com/angular-app/angular-app


22
stai rispondendo alla tua domanda subito dopo averla postata?
— Jakub,

34
@Jakub C'è un'opzione chiamata "rispondi alla tua domanda contribuendo al wiki" quando crei la domanda.
— Michael J. Calkins,

3
@MichaelCalkins, mi piace l'idea. Ho appena visto alcuni dei tuoi tutorial su YouTube anche su Angular, bello
— Ronnie,

5
@Ronnie Ricordo solo che questo è uno dei passi più difficili della curva di apprendimento verso AngularJS, quindi spero che aiuti le persone. Penso di aver passato 10 layout diversi dopo aver letto i blog e cosa no.
— Michael J. Calkins,

5
Ecco una pagina di best practice angularJS guidata dalla community. Il loro suggerimento sulla struttura dei file è una combinazione di entrambe le idee in due esempi. Mi piace di più il secondo esempio in quanto è più dietro l'idea di ordinare per caratteristica.
— Giovanni,

32

Dopo aver creato alcune applicazioni, alcune in Symfony-PHP, alcune .NET MVC, alcune ROR, ho scoperto che il modo migliore per me è usare Yeoman.io con il generatore AngularJS.

Questa è la struttura più popolare e comune e meglio mantenuta.

E, soprattutto, mantenendo quella struttura, ti aiuta a separare il tuo codice lato client e renderlo agnostico alla tecnologia lato server (tutti i tipi di diverse strutture di cartelle e diversi motori di modelli lato server).

In questo modo puoi facilmente duplicare e riutilizzare il tuo e altri codici.

Eccolo prima di Grunt Build: (ma usa il generatore yeoman, non solo crearlo!)

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

E dopo il grugnito build (concat, uglify, rev, ecc ...):

    /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
dove dovrebbe essere la configurazione del blocco di blocchi di codice? angular.module('myApp').config(function($routeProvider) { ... });
— sport

1
+1 Inoltre, puoi personalizzare dove yeoman mette le tue cose. IMHO, l'ordinamento per funzione / modulo nelle grandi app è migliore poiché puoi riutilizzare più facilmente una funzione in altre app.
— Tivie,

30

Mi piace questa voce sulla struttura di angularjs

È scritto da uno degli sviluppatori di angularjs, quindi dovrebbe darti una buona idea

Ecco un estratto:

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
La domanda riguarda la struttura delle cartelle e sebbene il collegamento sia interessante in altri modi, non porta nulla di nuovo alla tabella per questa domanda.
— Giovanni

Viene utilizzato dal generatore angolare Yeoman
— EdgarT

Quindi hai organizzato la cartella per tipo di script.
— Tudor,

4

Vi è anche l'approccio di organizzare le cartelle non in base alla struttura del framework, ma alla struttura della funzione dell'applicazione. Esiste un'applicazione Angular / Express di avvio github che illustra questa chiamata app angolare .


Questo è spesso un approccio migliore per progetti molto grandi. Purtroppo siamo ancora bloccati con le strutture delle cartelle ... taggare sarebbe meglio quindi non avrebbe molta importanza e potremmo avere più viste a seconda dei tag.
— Christophe Roussy,

3

Sono sulla mia terza app angularjs e la struttura delle cartelle è migliorata ogni volta finora. Tengo il mio semplice adesso.

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

Lo trovo buono per le singole app. Non ho ancora avuto un progetto in cui avrei bisogno di più.


Avrai problemi nel mantenimento e nell'introduzione di nuove funzionalità in un secondo momento. È sempre buona norma disporre di una struttura di cartelle con funzionalità e componenti correlati a tale funzionalità nella relativa cartella.
— Jaseem Abbas,

Ho ragione nel pensare che Angular JS non abbia una struttura di cartelle di progetto standard o un modello di progetto, come un progetto web asp.net o un'applicazione desktop di Windows?

1
@dotNetBlackBelt è corretto. Non esiste uno standard quando si tratta di angolare. Da quando ho pubblicato questo, ho apportato modifiche al modo in cui configuro le mie cartelle. Il mio ultimo progetto è andato più o meno quale sia la risposta principale di questo PO
— Ronnie il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.