Estructura de carpetas para un proyecto Node.js
(5)
En cuanto a las carpetas que mencionaste:
-
/libsse usa generalmente paraclasses/functions/modules -
/vendoro/supportcontiene bibliotecas de terceros (agregadas como sub-módulo git cuando se usa git como control de fuente) -
/speccontiene especificaciones para pruebas BDD. -
/testscontiene las/testsunitarias para una aplicación (utilizando un marco de prueba, consulte here )
NOTA: tanto /vendor como /support están en desuso desde que NPM introdujo una administración de paquetes limpia. Se recomienda manejar todas las dependencias de terceros usando NPM y un archivo package.json
Al crear una aplicación bastante grande, recomiendo las siguientes carpetas adicionales (especialmente si está utilizando algún tipo de MVC- / ORM-Framework como express o mongoose ):
-
/modelscontiene todos sus modelos ORM (llamadosSchemasen mangosta) -
/viewscontiene sus plantillas de vista (usando cualquier lenguaje de plantillas admitido en Express) -
/publiccontiene todo el contenido estático (imágenes, hojas de estilo, JavaScript del lado del cliente)-
/assets/imagescontiene archivos de imagen -
/assets/pdfcontiene archivos pdf estáticos -
/csscontiene hojas de estilo (o salida compilada por un motor css) -
/jscontiene JavaScript del lado del cliente
-
-
/controllerscontienen todas sus rutas expresas, separadas por módulo / área de su aplicación (nota: cuando se utiliza la funcionalidad de arranque de Express, esta carpeta se llama/routes)
Me acostumbré a organizar mis proyectos de esta manera y creo que funciona bastante bien.
Actualización para aplicaciones Express basadas en CoffeeScript (usando connect-assets ):
-
/appcontiene tu JavaScript compilado -
/assets/contiene todos los activos del lado del cliente que requieren compilación-
/assets/jscontiene sus archivos CoffeeScript del lado del cliente -
/assets/csscontiene todas sus hojas de estilo LESS / Stylus
-
-
/public/(js|css|img)contiene sus archivos estáticos que no son manejados por ningún compilador -
/srccontiene todos sus archivos CoffeeScript específicos del servidor -
/testcontiene todos los scripts de prueba de unidad (implementados utilizando un marco de prueba de su elección) -
/viewscontiene todas sus vistas rápidas (ya sea jade, ejs o cualquier otro motor de plantillas)
Noté que los proyectos de Node.js a menudo incluyen carpetas como estas:
/ libs, / vendor, / support, / spec, / tests
¿Qué significa exactamente esto? ¿Cuál es la diferencia entre ellos y dónde debo incluir el código de referencia?
Es importante tener en cuenta que no hay consenso sobre cuál es el mejor enfoque y los marcos relacionados en general no imponen ni recompensan ciertas estructuras.
Me parece que esto es una sobrecarga frustrante y enorme, pero igualmente importante. Es una especie de versión minimizada (pero IMO más importante) del tema de la guía de estilo . Me gusta señalar esto porque la respuesta es la misma: no importa qué estructura use, siempre que esté bien definida y sea coherente .
Así que me propongo buscar una guía completa que le guste y dejar 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 ese no es necesariamente el caso. Por ejemplo aquí hay otro enfoque .
Esta es una respuesta indirecta, en la estructura de la carpeta en sí, muy relacionada.
Hace unos años tuve la misma pregunta, tomé una estructura de carpetas pero tuve que hacer un montón de directorios para después, porque la carpeta tenía un propósito diferente al que he leído en Internet, es decir, lo que hace una carpeta en particular. Diferentes significados para diferentes personas en algunas carpetas.
Ahora, después de haber realizado varios proyectos, además de la explicación en todas las demás respuestas, sobre la estructura de la carpeta, sugeriría seguir la estructura de Node.js, que se puede ver en: https://github.com/nodejs/node . Tiene un gran detalle en todos, dicen los linters y otros, qué estructura de carpetas y archivos tienen y dónde. Algunas carpetas tienen un archivo README que explica qué hay en esa carpeta.
Comenzar en la estructura anterior es bueno porque algún día llegará un nuevo requisito y tendrá un margen de mejora ya que ya está seguido por Node.js, que se mantiene durante muchos años.
Espero que esto ayude.
Hay una discusión en GitHub debido a una pregunta similar a esta: https://gist.github.com/1398757
Puedes usar otros proyectos como guía, busca en GitHub para:
- ThreeNodes.js - en mi opinión, parece tener una estructura específica que no es adecuada para cada proyecto;
- más ligero - una estructura más simple, pero carece de un poco de organización;
Y, finalmente, en un libro ( http://shop.oreilly.com/product/0636920025344.do ) sugiere esta estructura:
- index.html
- js /
- main.js
- modelos /
- puntos de vista/
- colecciones /
- plantillas/
- libs /
- columna vertebral/
- guion bajo/
- ...
- css /
- ...
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 se separó a las carpetas DB y APP dentro del directorio SRC.