JavaScript - Imports Dinamicos

 
Vista:

Imports Dinamicos

Publicado por Joel De Ponte (2 intervenciones) el 25/05/2024 22:12:29
Hola, en el siguiente código no logro exportar la variable "routers" con los módulos cargados dinamicamente. Agradecido si alguien me puede orientar en como solucionarlo.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import fs from 'fs'
import path from 'path'
 
let routers = {}
const root_dir = './routers/'
const directory = './backend/api/routers/';
const extension = '.js'
const options = { withFileTypes: true, recursive: true }
 
fs.readdirSync(directory, options)
  .filter(file => { return path.extname(file.name) === extension })
  .forEach(file => {
    const filepath = root_dir + file.name
    const filename = file.name.split('.')[0]
    import(filepath)
      .catch(error => console.error(error))
      .then(module => {
        routers[filename] = module.default
        // console.log(routers) // aquí sí se muestran los modulos cargados dentro del objeto.
      })
  })
 
export default routers // aquí ya no estan los modulo en el objeto.

Gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Re: Imports Dinamicos

Publicado por Joel De Ponte (2 intervenciones) el 28/05/2024 03:37:29
Hola, dejo a continuación la solución por si acaso alguien tiene el mismo problema:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import fs from 'fs'
import path from 'path'
 
let routers = {}
const root_dir = './routers/'
const directory = './backend/api/routers/';
const extension = '.js'
const options = { withFileTypes: true, recursive: true }
 
const files = fs.readdirSync(directory, options)
  .filter(file => { return path.extname(file.name) === extension })
 
files.map(file => {
  const filename = file.name.split('.')[0]
  const filepath = root_dir + file.name
  routers[filename] = import(filepath)
    .then(module => { return module.default })
    .catch(error => console.error(error))
})
 
export default routers

Y en el archivo donde necesito el import de la variable "routers", lo hago de la siguiente forma:

1
2
3
import routers from "./routers.js"
 
const myRouters = await routers // Tambien como "const myRouters = await routers.objeto" si necesito llamar un objeto en específico

Gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar