es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo el plugin de webpack modifica la dirección del recurso de imagen utilizado en los activos de JS?

Quiero implementar un complemento de Webpack4 que pueda subir ciertos archivos al CDN después de empaquetarlos, como imágenes.

Sin embargo, descubrí que la dirección de la imagen cargada en los archivos JS en la fase “compiler.hooks.emit” estaba escrita incorrectamente. No puedo actualizarla. La dirección actual después de empaquetar es la siguiente:

cf05:function(e,t,n){e.exports=n.p+”img/logo.82b9c7a5.png”}}

Me gustaría actualizar esta dirección de imagen a la siguiente:

https://www.test.com/cdn/img/logo.82b9c7a5.png

No puedo usar PublicPath porque se aplica a todos los recursos; quiero que se aplique a algunos recursos, ¿existe una API que pueda hacer eso?

Muchas gracias.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para actualizar la dirección de la imagen para ciertos archivos y no todos los recursos, necesitarías escribir un plugin personalizado para Webpack4.

    En tu plugin personalizado, puedes acceder a la fase compiler.hooks.emit y modificar el código fuente de los archivos JS del activo. Específicamente, puedes usar una expresión regular para encontrar y reemplazar la dirección de la imagen con la URL del CDN.

    Aquí tienes un ejemplo de cómo hacerlo:

    class MyCustomPlugin {
      apply(compiler) {
    
        compiler.hooks.emit.tapAsync('MyCustomPlugin', (compilation, callback) => {
    
          // Obtén el código fuente de los archivos JS del activo
          const assetsJS = compilation.assets['assets.js'].source()
    
          // Usa una expresión regular para encontrar y reemplazar la dirección de la imagen
          const updatedAssetsJS = assetsJS.replace(/cdn\/img/g, 'https://www.test.com/cdn/img')
    
          // Reemplaza el JS del activo original con la versión actualizada
          compilation.assets['assets.js'] = {
            source: () => updatedAssetsJS,
            size: () => updatedAssetsJS.length
          }
    
          callback()
        })
      }
    }
    

    Para usar este plugin, lo agregarías a tu configuración de Webpack4 de la siguiente manera:

    const MyCustomPlugin = require('./my-custom-plugin.js')
    
    module.exports = {
      // ...
      plugins: [
        new MyCustomPlugin()
      ]
    }
    

    Esto debería actualizar la dirección de la imagen para ciertos archivos, sin afectar al resto de tus recursos.

Comments are closed.