Estoy usando un paquete web para obtener archivos específicos disponibles en un tiempo de ejecución de aws lambda, ya que este paquete web está configurado para incluir ciertos archivos importados en el directorio de compilación. Puedo hacer que esto suceda usando la funcionalidad de asset/reource webpack >5. Sin embargo, lo que quiero hacer es que los archivos que importo se coloquen en el mismo directorio donde defino la importación.
por ejemplo, cuando tengo una situación como la siguiente:
- folder -- folderX ---- handler.jsy dentro de handler.js importo
import 'wsdl/WebService.wsdl'entonces quiero que este archivo se envíe a la misma carpeta que el controlador, como se muestra a continuación
- build -- folderX ---- handler.js ---- wsdl ------ WebService.wsdlde esta manera puedo leer el archivo en el tiempo de ejecución de lambda.
así que he estado haciendo esto.
output: { filename: '[name].js', libraryTarget: 'commonjs2', path: resolve(__dirname, 'build'), pathinfo: false, assetModuleFilename: '[path]/[base]' }, mode: isProd ? 'production' : 'development', module: { rules: [ { test: /\.ts$/, loader: 'ts-loader', options: {transpileOnly: true} }, { test: /\.(wsdl|xml)$/, type: 'asset/resource', } ], },lo que resulta en
- build -- folderX ---- handler.js -- wsdl ---- WebService.wsdl Sin embargo, necesito que la carpeta wsdl esté dentro de la misma carpeta que el controlador. ¿Hay alguna forma de lograr esto usando otro nombre similar a [base] o [path] ?
ok, encontré la respuesta por mi cuenta, hay muchas configuraciones personalizadas disponibles en la opción output.assetModuleFilename , así que lo que terminé usando fue la siguiente función.
const resolveWsdlInCurrentRuntime: Configuration['output']['assetModuleFilename'] = (pathData) => { return join(dirname(pathData.runtime.toString()), '[path]', '[base]'); } output: { filename: '[name].js', libraryTarget: 'commonjs2', path: resolve(__dirname, 'build'), pathinfo: false, assetModuleFilename: resolveWsdlInCurrentRuntime, }