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.

Error 404 al obtener imagen con webpack

Estoy siguiendo este enlace para agregar imágenes a mi paquete:

https://webpack.js.org/guides/asset-management/

Tengo la siguiente estructura de archivos en mi carpeta raíz:

index.html

index.js

carpeta de imágenes (con archivos SVG)

Este es mi webpack.config.js

// Generado usando webpack-cli https://github.com/webpack/webpack-cli

const path = require('path');

const isProduction = process.env.NODE_ENV === 'production';
const HtmlWebpackPlugin = require("html-webpack-plugin");

const stylesHandler = 'style-loader';



const config = {
    entry: './index.js',
    output: {
        path: path.resolve(__dirname, 'dist'),
        filename: 'index_bundle.js'
    },
    devServer: {
        open: true,
        historyApiFallback: true,
        host: 'localhost'
    },
    plugins: [
        new HtmlWebpackPlugin({
            title: 'Plantilla personalizada',
            // Carga una plantilla personalizada (lodash por defecto)
            template: 'index.html'
        })
    ],
    module: {
        rules: [
            {
                test: /\.(png|svg|jpg|jpeg|gif)$/i,
                type: 'images',
            },
        ]
    }
};


module.exports = () => {
    if (isProduction) {
        config.mode = "production";
    } else {
        config.mode = "development";
    }
    return config;
};

Estoy utilizando los siguientes módulos de Webpack:

“webpack”: “^5.64.4”,
“webpack-cli”: “^4.9.1”,
“webpack-dev-server”: “^4.6.0”,
“wepack-cli”: “0.0.1-security”

En mi archivo js, estoy intentando agregar una imagen a un elemento SVG haciendo lo siguiente:

.attr('xlink:href', 'images/virtual-machine.svg')

Pero obtengo un error 404.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para solucionar el error 404, debes asegurarte de que webpack esté manejando adecuadamente los archivos de imagen y copiándolos en la carpeta de salida. Según tu configuración de webpack, estás usando el tipo images para file-loader, lo cual no es un tipo de recurso válido. En su lugar, debes usar el tipo asset para manejar las imágenes:

    rules: [
       {
          test: /\.(png|svg|jpg|jpeg|gif)$/i,
          type: 'asset/resource',
          generator: {
             filename: 'images/[hash][ext][query]'
          }
       },
    ]
    

    Esta configuración indica a webpack que utilice el tipo asset/resource para manejar los archivos de imagen, lo cual emite el archivo en el directorio de salida y devuelve la dirección URI pública del archivo. La opción generator se utiliza aquí para renombrar el archivo emitido a la carpeta images con un nombre de archivo encriptado.

    Una vez que hayas actualizado tu configuración, asegúrate de reiniciar tu servidor de desarrollo y verificar que el archivo de imagen esté presente en el directorio de salida. Puedes hacer esto revisando la pestaña de red en las herramientas de desarrollo de tu navegador en busca de errores 404.

Comments are closed.