¿Cómo requiero todos los archivos en una carpeta en node.js?
necesita algo como:
files.forEach(function (v,k){
// require routes
require('./routes/'+v);
}};
javascript
node.js
directory
require
Harry
fuente
fuente
var routes = require('auto-load')('routes');
con el nuevoauto-load
módulo [ayudé a crearlo].Respuestas:
Cuando require recibe la ruta de una carpeta, buscará un archivo index.js en esa carpeta; si hay uno, lo usa, y si no lo hay, falla.
Probablemente tendría más sentido (si tiene control sobre la carpeta) crear un archivo index.js y luego asignar todos los "módulos" y luego simplemente requerirlo.
yourfile.js
index.js
Si no conoce los nombres de los archivos, debe escribir algún tipo de cargador.
Ejemplo de trabajo de un cargador:
fuente
require
se le da la ruta de una carpeta, buscará unaindex.js
en esa carpeta; si hay uno, lo usa, y si no lo hay, falla. Consulte github.com/christkv/node-mongodb-native para ver un ejemplo real de esto: hay unindex.js
directorio raíz que requiere./lib/mongodb
, un directorio;./lib/mongodb/index.js'
hace que todo lo demás en ese directorio esté disponible.require
es una función síncrona, por lo que no hay beneficios de la devolución de llamada. En su lugar, usaría fs.readdirSync.package.json
en este directorio. De este modo:{main: './lib/my-custom-main-file.js'}
Recomiendo usar glob para lograr esa tarea.
fuente
glob
? que quiere decirglob-savior-of-the-nodejs-race
. La mejor respuesta.Basado en la solución de @ tbranyen, creo un
index.js
archivo que carga javascripts arbitrarios en la carpeta actual como parte deexports
.Entonces puede
require
este directorio desde cualquier otro lugar.fuente
/\.js(on)?$/
sería mejor. ¿Tampoco es!== null
redundante?Otra opción es usar el paquete require-dir que le permite hacer lo siguiente. Es compatible con la recursividad también.
fuente
require-dir
porque excluye automáticamente el archivo de llamada (índice) y por defecto es el directorio actual. Perfecto.require-dir
agregó unafilter
opción.Tengo una carpeta / campos llenos de archivos con una sola clase cada uno, por ejemplo:
Suelte esto en fields / index.js para exportar cada clase:
Esto hace que los módulos actúen más como lo harían en Python:
fuente
Una opción más es require-dir-all combinando características de los paquetes más populares.
El más popular
require-dir
no tiene opciones para filtrar los archivos / directorios y no tienemap
función (ver más abajo), pero utiliza un pequeño truco para encontrar la ruta actual del módulo.En segundo lugar, por popularidad
require-all
tiene el filtrado y el preprocesamiento de expresiones regulares, pero carece de una ruta relativa, por lo que debe usar__dirname
(esto tiene ventajas y desventajas) como:Mencionado aquí
require-index
es bastante minimalista.Con
map
usted puede hacer un preprocesamiento, como crear objetos y pasar valores de configuración (suponiendo que los módulos debajo de los constructores de exportaciones):fuente
Sé que esta pregunta tiene más de 5 años y las respuestas dadas son buenas, pero quería algo un poco más potente para express, así que creé el
express-map2
paquete para npm. Iba a nombrarlo simplementeexpress-map
, sin embargo, las personas en Yahoo ya tienen un paquete con ese nombre, así que tuve que cambiar el nombre de mi paquete.1. uso básico:
uso del controlador:
2. uso avanzado, con prefijos:
Como puede ver, esto ahorra un montón de tiempo y hace que el enrutamiento de su aplicación sea fácil de escribir, mantener y comprender. Es compatible con todos los verbos http que expresan soportes, así como con el
.all()
método especial .fuente
Un módulo que he estado usando para este caso de uso exacto es require-all .
Requiere recursivamente todos los archivos en un directorio dado y sus subdirectorios siempre que no coincidan con la
excludeDirs
propiedad.También permite especificar un filtro de archivo y cómo derivar las claves del hash devuelto a partir de los nombres de archivo.
fuente
Estoy usando módulos de nodo de copia para crear un solo archivo para requerir todos los archivos en nuestro sistema basado en NodeJS.
El código para nuestro archivo de utilidad se ve así:
En todos los archivos, la mayoría de las funciones se escriben como exportaciones, así:
Entonces, para usar cualquier función de un archivo, simplemente llame:
fuente
Ampliando esta
glob
solución. Haga esto si desea importar todos los módulos de un directorioindex.js
y luego importarloindex.js
en otra parte de la aplicación. Tenga en cuenta que los literales de plantilla no son compatibles con el motor de resaltado utilizado por stackoverflow, por lo que el código puede parecer extraño aquí.Ejemplo completo
Estructura de directorios
globExample / example.js
globExample / foobars / index.js
globExample / foobars / unexpected.js
globExample / foobars / barit.js
globExample / foobars / fooit.js
Desde dentro del proyecto con
glob
instalado , ejecutenode example.js
fuente
Puede usar: https://www.npmjs.com/package/require-file-directory
fuente
Requerir todos los archivos de la
routes
carpeta y aplicarlos como middleware. No se necesitan módulos externos.fuente
Usando esta función puede requerir un directorio completo.
fuente
Si incluye todos los archivos de * .js en el ejemplo de directorio ("app / lib / *. Js"):
En directorio app / lib
ejemplo.js:
ejemplo-2.js:
En la aplicación de directorio, cree index.js
index.js:
fuente