2011-03-03 110 views
295

Me he dado cuenta de que los proyectos Node.js a menudo incluyen carpetas como éstas:estructura de carpetas para un proyecto Node.js

/libs,/proveedor,/apoyo/spec,/Contrastes

¿Qué significan exactamente? ¿Cuál es la diferencia entre ellos, y dónde debería incluir el código referenciado?

Respuesta

389

En cuanto a las carpetas que mencionan:

  • /libs por lo general se utiliza para personalizados clases/funciones/módulos
  • /proveedor o /apoyo contiene bibliotecas 3 ª parte (añadido como Git submódulo cuando se utiliza git como control de origen)
  • /spec contiene especificaciones para las pruebas de BDD.
  • /pruebas contiene la unidad de pruebas para una aplicación (utilizando un marco de pruebas , ver here)

NOTA: tanto/proveedor y/apoyo están en desuso desde NPM introdujo una gestión de paquetes limpio . Se recomienda manejar todas las dependencias de terceros utilizando NPM y un paquete.archivo JSON

Cuando se construye una aplicación bastante grande, recomiendo las siguientes carpetas adicionales (especialmente si está utilizando algún tipo de MVC-/ORM-Marco como express o mongoose):

  • /modelos contiene todos sus modelos ORM (llamados Schemas en mangosta)
  • /vistas contiene su vista, plantillas (utilizando cualquier lenguaje de plantillas apoyado en expreso)
  • /pública contiene todos los contenidos estáticos (imágenes, hojas de estilo, JavaScript del lado cliente)
    • /activos/imágenes contiene archivos de imagen
    • /activos/pdf contiene archivos PDF estáticos
    • /css contiene las hojas de estilo (o salida compilada por un motor CSS)
    • /js contiene JavaScript del lado cliente
  • /controladores contienen todas sus rutas expresas, separadas por módulo/área de su aplicación (nota: cuando se utiliza la funcionalidad de arranque del expreso, esta carpeta se llama /rutas)

Me acostumbré a organizar mis proyectos de esta manera y creo que funciona bastante bien.

Actualización para aplicaciones expreso basadas en CoffeeScript (usando connect-assets):

  • /app contiene su compilado JavaScript
  • /activos/ contiene todos los activos del lado del cliente que requieren la compilación
    • /assets/js contiene su archivos CoffeeScript del lado del cliente
    • /activos/css contiene todos sus MENOS/Stylus hojas de estilo
  • /public/(js | css | img) contiene sus archivos estáticos que no maneja cualquier compiladores
  • /src contiene todos los archivos del lado del servidor CoffeeScript específicos
  • /prueba contiene todos los scripts de pruebas unitarias (implementado utilizando una prueba-marco de su elección)
  • /vistas contiene todos sus puntos de vista expresos (ya sea de jade, ejs o cualquier otro motor de plantillas)
+5

donde pondrías tus js, css, imágenes del lado del cliente? Qué sugeriría una estructura de carpetas similar en la carpeta pública, como: públicas/activos /activos/css pública /assets/images públicas /activo/docs públicas públicas/libs apoyo público/ pública/ pruebas públicas/modelos/ públicos vistas públicas/controladores ? – ezmilhouse

+2

expressjs crea un directorio ./routes, ¿es lo mismo que ./controllers en su ejemplo? – chovy

+2

¿Por qué no creas un generador Yeoman con esa propuesta? Podría convertirse en un estándar. –

44

hay una discusión en GitHub debido a una pregunta similar a esta: https://gist.github.com/1398757

puede utilizar otros proyectos para la orientación, buscar en GitHub para:

  • ThreeNodes.js - en mi opinión, parece tener una estructura específica no es adecuado para todos los proyectos ;
  • encendedor: una estructura más simple, pero le falta un poco de organización;

Y, por último, en un libro (http://shop.oreilly.com/product/0636920025344.do) sugiere esta estructura:

  • index.html
  • js/
    • main.js
    • modelos/
    • vistas/
    • colecciones/
    • plantillas/
    • libs/
      • troncales/
      • subrayado/
      • ...
  • css/
  • ...
+12

+1 para la discusión Github, eso es realmente genial! – Mahdi

+0

Creé un módulo para requerir archivos de forma dinámica, lo que le permite estructurar su proyecto por función en lugar del típico modelo, vista, controlador. Espero que ayude alguien: https://github.com/ssmereka/crave – Scott

+0

¿qué tal una simple carpeta de 'incluir' utilizada como en asp o php? – stackdave

9

Más ejemplo de mi proyecto de arquitectura se puede ver aquí:

├── Dockerfile 
├── README.md 
├── config 
│   └── production.json 
├── package.json 
├── schema 
│   ├── create-db.sh 
│   ├── db.sql 
├── scripts 
│   └── deploy-production.sh 
├── src 
│   ├── app -> Containes API routes 
│   ├── db -> DB Models (ORM) 
│   └── server.js -> the Server initlializer. 
└── test 

Básicamente, la aplicación lógica separada a DB y Carpetas de APP dentro del directorio de SRC.

+0

si su aplicación también contiene una aplicación de front-end, póngala bajo 'src' o la la aplicación front-end obtiene su propia carpeta (con su propio 'paquete.json' y una estructura de carpetas similar)? – wal

+0

@wal Prefiero separar proyectos frontend a otro repositorio ya que es más organizado –

0

Esta es la respuesta indirecta, en la estructura de carpetas en sí, muy relacionado.

Hace unos años tuve la misma pregunta, tomé una estructura de carpetas pero tuve que hacer un montón de directorios moviéndome más adelante, porque la carpeta tenía un propósito diferente al que he leído en internet, es decir, qué la carpeta particular tiene diferentes significados para diferentes personas en algunas carpetas.

Ahora, habiendo realizado varios proyectos, además de la explicación en todas las demás respuestas, en la estructura de la carpeta en sí, recomiendo encarecidamente seguir la estructura del propio Node.js, que se puede ver en: https://github.com/nodejs/node. Tiene gran detalle sobre todos, como Linters y otros, qué estructura de archivos y carpetas tienen y dónde. Algunas carpetas tienen un README que explica qué hay en esa carpeta.

Comenzar en la estructura de arriba es bueno porque algún día entra un nuevo requisito pero usted tendrá un alcance para mejorar ya que es seguido por el propio Node.js que se mantiene durante muchos años.

Espero que esto ayude.

0

Es importante tener en cuenta que no hay consenso sobre cuál es el mejor enfoque y los marcos relacionados en general no hacen cumplir ni recompensar a ciertas estructuras.

me parece que se trata de una sobrecarga frustrante y enorme, pero igualmente importantes. Es una especie de versión minimizada (pero IMO más importante) del style guide issue. Me gustaría señalar esto porque la respuesta es la misma: , no importa qué estructura uses siempre que esté bien definida y sea coherente.

Así que me propongo buscar una guía completa que te gusta y dejar en claro que el proyecto se basa en esto.

no es fácil, especialmente si eres nuevo en esto! Espera pasar horas investigando. Encontrará la mayoría de las guías que recomiendan una estructura similar a MVC. Si bien hace varios años esa podría haber sido una opción sólida, hoy en día no es necesariamente el caso. Por ejemplo here's another approach.

Cuestiones relacionadas