Trabajo en un gran monorepo que tiene muchos archivos procesados por Webpack. Uno de nuestros patrones principales es que usamos nombres de archivo totalmente calificados para cada nombre de módulo e importación. Por ejemplo, si tengo un archivo con la ruta "/ruta/al/módulo/MyCoolModule.js", la importación simplemente parecería import MyCoolModule from 'MyCoolModule' sin necesidad de una ruta explícita al módulo. Esto se habilita al escanear recursivamente los directorios del proyecto en busca de todos los archivos/carpetas .js relevantes en Webpack init y luego pasar los archivos escaneados a resolve.modules y resolve.alias .
Nos gusta este patrón y funciona bien para uso general cuando el paquete web se ejecuta en modo watch ; sin embargo, se descompone cuando se agregan nuevas carpetas y archivos al proyecto mientras Webpack ya se está ejecutando. Debido a que los archivos y carpetas solo se escanean al inicio de Webpack, Webpack no puede resolver las importaciones de nuevos archivos/carpetas agregados desde que comenzó, por lo que la compilación fallará. Esto requiere que reiniciemos Webpack, lo que demora de 1 a 2 minutos en nuestro proyecto. Para muchos ingenieros, al cambiar entre las ramas de git o actualizar los cambios desde master , esto puede sumarse a una ralentización significativa en el tiempo sin procesar y en el flujo de interrupción.
Me gustaría escribir un complemento que actualice dinámicamente resolve.modules y resolve.alias de modo que no tengamos que reiniciar Webpack cuando se agreguen nuevas carpetas y archivos al proyecto. Sin embargo, no sé cómo hacer esto. Parece que tengo tres preguntas principales:
tap detecte nuevos archivos o carpetas?plugins de nivel superior? resolve.plugins ? etc. Según lo entiendo, el lugar donde se coloca/configura el complemento afectará los ganchos disponibles para él.resolve en algún lugar que contiene resolve.modules y resolve.aliases que Webpack hace referencia activamente, pero no estoy seguro de dónde viviría o dónde acceder a él (esto también podría ser completamente incorrecto)(nota: técnicamente estamos usando Webpack 4, pero las respuestas para Webpack 5 son bienvenidas porque sé que estamos atrasados, y supongo que una solución de Webpack 5 aún me indicaría la dirección correcta)
¡Gracias!