Estructura de carpetas para un proyecto Node.js
(5)
En cuanto a las carpetas que mencionaste:
-
/libs
se usa generalmente paraclasses/functions/modules
-
/vendor
o/support
contiene bibliotecas de terceros (agregadas como sub-módulo git cuando se usa git como control de fuente) -
/spec
contiene especificaciones para pruebas BDD. -
/tests
contiene las/tests
unitarias 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 ):
-
/models
contiene todos sus modelos ORM (llamadosSchemas
en mangosta) -
/views
contiene sus plantillas de vista (usando cualquier lenguaje de plantillas admitido en Express) -
/public
contiene todo el contenido estático (imágenes, hojas de estilo, JavaScript del lado del cliente)-
/assets/images
contiene archivos de imagen -
/assets/pdf
contiene archivos pdf estáticos -
/css
contiene hojas de estilo (o salida compilada por un motor css) -
/js
contiene JavaScript del lado del cliente
-
-
/controllers
contienen 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 ):
-
/app
contiene tu JavaScript compilado -
/assets/
contiene todos los activos del lado del cliente que requieren compilación-
/assets/js
contiene sus archivos CoffeeScript del lado del cliente -
/assets/css
contiene todas sus hojas de estilo LESS / Stylus
-
-
/public/(js|css|img)
contiene sus archivos estáticos que no son manejados por ningún compilador -
/src
contiene todos sus archivos CoffeeScript específicos del servidor -
/test
contiene todos los scripts de prueba de unidad (implementados utilizando un marco de prueba de su elección) -
/views
contiene 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.