Estructura de carpetas AngularJS [cerrado]

Respuestas:

251

ingrese la descripción de la imagen aquí

Ordenar por tipo

A la izquierda tenemos la aplicación organizada por tipo. No está mal para aplicaciones más pequeñas, pero incluso aquí puedes comenzar a ver que es más difícil encontrar lo que estás buscando. Cuando quiero encontrar una vista específica y su controlador, están en diferentes carpetas. Puede ser bueno comenzar aquí si no está seguro de cómo organizar el código, ya que es bastante fácil cambiar a la técnica de la derecha: estructura por característica.

Ordenar por característica (preferido)

A la derecha, el proyecto está organizado por características. Todas las vistas y controladores de diseño van en la carpeta de diseño, el contenido del administrador va en la carpeta de administrador y los servicios que utilizan todas las áreas van en la carpeta de servicios. La idea aquí es que cuando está buscando el código que hace que una característica funcione, se encuentra en un solo lugar. Los servicios son un poco diferentes, ya que "dan servicio" a muchas funciones. Me gusta esto una vez que mi aplicación comienza a tomar forma, ya que se vuelve mucho más fácil de administrar para mí.

Una publicación de blog bien escrita: http://www.johnpapa.net/angular-growth-structure/

Aplicación de ejemplo: https://github.com/angular-app/angular-app

Michael J. Calkins
fuente
22
¿Estás respondiendo tu propia pregunta justo después de publicarla?
Jakub
34
@Jakub Hay una opción llamada "responde tu propia pregunta contribuyendo a wiki" cuando creas la pregunta.
Michael J. Calkins
3
@MichaelCalkins, me gusta la idea. Acabo de ver algunos de tus trucos de YouTube en angular también, agradable
Ronnie
55
@Ronnie Solo recuerdo que este es uno de los pasos de la curva de aprendizaje más difíciles para AngularJS, así que espero que ayude a las personas. Creo que pasé por 10 diseños diferentes después de leer blogs y demás.
Michael J. Calkins
55
Aquí hay una página de mejores prácticas de angularJS dirigida por la comunidad. Su sugerencia de estructura de archivo es una combinación de ambas ideas en dos ejemplos. Me gusta más el segundo ejemplo, ya que está más detrás de la idea de ordenar por función.
John
32

Después de construir algunas aplicaciones, algunas en Symfony-PHP, algunas .NET MVC, algunas ROR, descubrí que la mejor manera para mí es usar Yeoman.io con el generador AngularJS.

Esa es la estructura más popular y común y mejor mantenida.

Y lo más importante, al mantener esa estructura, le ayuda a separar su código del lado del cliente y hacerlo independiente de la tecnología del lado del servidor (todo tipo de diferentes estructuras de carpetas y diferentes motores de plantillas del lado del servidor).

De esa manera, puede duplicar y reutilizar fácilmente el código suyo y de otros.

Aquí está antes de la construcción de gruñidos: (pero use el generador yeoman, ¡no lo cree solo!)

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

Y después de grunt build (concat, uglify, rev, etc ...):

    /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)
Urigo
fuente
1
¿Dónde debería estar la configuración del bloque de rutas de código? angular.module('myApp').config(function($routeProvider) { ... });
deportes
1
+1 Además, puedes personalizar dónde yeoman pone tus cosas. En mi humilde opinión, ordenar por función / módulo en aplicaciones grandes es mejor ya que puede reutilizar más fácilmente una función en otras aplicaciones.
Tivie
30

Me gusta esta entrada sobre la estructura angularjs

Está escrito por uno de los desarrolladores de angularjs, por lo que debería darle una buena idea

Aquí hay un extracto:

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
    └── ...
Chris
fuente
1
La pregunta es sobre la estructura de carpetas y aunque el enlace es interesante de otras maneras, no aporta nada nuevo a la tabla para esta pregunta.
JohnC
Esto es utilizado por el generador angular Yeoman
EdgarT
Entonces organizó la carpeta por tipo de guiones.
Tudor
4

También existe el enfoque de organizar las carpetas no por la estructura del marco, sino por la estructura de la función de la aplicación. Hay una aplicación Angular / Express de arranque de github que ilustra esta llamada aplicación angular .

BoxerBucks
fuente
Este suele ser un mejor enfoque para proyectos muy grandes. Lamentablemente, todavía estamos atrapados con las estructuras de carpetas ... el etiquetado sería mejor, por lo que no importaría tanto y podríamos tener múltiples vistas dependiendo de las etiquetas.
Christophe Roussy
3

Estoy en mi tercera aplicación angularjs y la estructura de carpetas ha mejorado cada vez hasta ahora. Mantengo el mío simple en este momento.

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

Me parece bueno para aplicaciones individuales. Realmente no he tenido un proyecto todavía donde necesitaría múltiples.

Ronnie
fuente
Tendrá problemas para mantener e introducir nuevas características más adelante. Siempre es una buena práctica tener una estructura de carpetas con características y componentes relacionados con esa característica debajo de su carpeta.
Jaseem Abbas
¿Estoy en lo cierto al pensar que Angular JS no tiene una estructura de carpeta de proyecto estándar o una plantilla de proyecto, como un proyecto web asp.net o una aplicación de escritorio de Windows?
1
@dotNetBlackBelt eso es correcto. No hay un estándar cuando se trata de angular. Desde que publiqué esto, he realizado cambios en la configuración de mis carpetas. Mi último proyecto fue más o menos cuál es la respuesta principal de este OP
Ronnie