tutorial compile app webpack require

compile - webpack config



Cómo requerir JavaScript usando un paquete web desde un directorio dinámico (2)

Tengo un poco de JavaScript ES5 simple y antiguo de la escuela que necesito introducir en mi aplicación que utiliza el paquete web como un empaquetador. El problema es que la ubicación de estos archivos se encuentra en una carpeta cuya ruta es dinámica. Parece que el webpack no funciona bien con las expresiones en require y require.context no las permite en absoluto.

Para que los directorios de rutas conocidas requieran todos los archivos en un directorio y sus subdirectorios, este enfoque funciona bien :

let domainRequires = require.context(''./app/domain'', true, //.js$/); domainRequires.keys().forEach(domainRequires);

Ya que no puedo usar una expresión en require.context , intenté simplemente usar plain require y NO está funcionando :

require(''../../path/to/code/my-library-'' + versionNumber + ''/domain/clazz.js'');

utilizando la ruta relativa completa.

También he intentado usar require.context pero mejorando la parte de expresiones regulares para que funcione y no he tenido suerte:

require.context(''../../path/to/code'', true, /^my-library-.*//domain//.*/.js$/);

Cualquier pensamiento, sugerencia o solución sería bienvenido. Si necesito usar algo de terceros con el paquete web, eso también está bien.


De Webpack 3.9 (creo) los commonRequires no son necesarios. Ejecuto esto en webpack.config.js:

resolve: { alias: { tmpDir: path.resolve(__dirname, ''/tmp'') } }

Y luego cargo mi módulo personalizado como:

const dynModule = require(''tmpDir/dyn_module.js'');

No estoy seguro de si me olvido de algo de sus requisitos, pero commonRequires no es necesario para mí y Webpack lo construye bien (y funciona).


Terminé resolviendo esto. Al usar el paquete web resolve.alias , podría agregar:

resolve: { alias: { common: path.resolve(__dirname, ''../../path/to/code/my-library-'' + versionNumber + ''/domain'') } }

en webpack.config .

Luego, en mi código, puedo solicitar todos los archivos bajo /domain través de:

var commonRequires = require.context(''common'', true, //.js$/); commonRequires.keys().forEach(commonRequires);

Del mismo modo, podría obtener un solo archivo a través de:

require(''common/clazz.js''); // ../../path/to/code/my-library-1.0.0/domain/clazz.js

FWIW, para obtener la versión Número utilicé el módulo fs del nodo para leer un archivo json, usé JSON.parse(file) y luego JSON.parse(file) la versión en la parte superior de webpack.config