Descartar y volver a importar la importación dinámica
Tengo un archivo de configuración de JS exportado como un módulo CJS que me gustaría analizar y hacer algo con él cada vez que se detecte un cambio. Tengo la función de observación configurada y termina llamando a esta función:
const parseConfig = async (path: string) => {
let config;
try {
config = (await import(path)).default;
} catch (_) {
// algo salió mal, tal vez fue mal formateado
}
return config;
};
Como puedes ver, estoy usando una importación dinámica para obtener el archivo JS. Esto funciona, excepto por el hecho de que después de ser importado la primera vez, parece que se almacena en caché y no se actualiza después de eso.
¿Hay alguna manera de descartar la importación existente y forzar una nueva importación de un archivo JS importado dinámicamente?
Alternatively, si hay una solución más directa para esto, estoy abierto a sugerencias.
NB: Estoy usando esbuild, por lo que resuelve mis declaraciones de importación por mí; Intenté cambiarlo a una declaración require dinámica ya que es CJS, pero tuvo el mismo efecto.
davy.ai
Sí, puedes forzar la re-importación de un archivo JS importado dinámicamente utilizando la palabra clave
delete
incorporada en conjunción con el objetorequire.cache
.Aquí tienes un ejemplo de cómo puedes modificar tu función
parseConfig
para eliminar el módulo en caché y forzar una re-importación:Al eliminar el módulo en caché antes de importarlo nuevamente, puedes asegurarte de tener siempre la versión más reciente del archivo.