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.

importación de imágenes desde la biblioteca de componentes de Svelte

He creado una biblioteca de componentes Svelte que contiene algunas imágenes.

lib
└ static
  └ Dog_1.png

Esto luego se referencia en una etiqueta de imagen:

<img src="Dog_{Math.floor(Math.random() * 30)}.png">

Funciona bien y la imagen aparece en Storybook.

Pero el problema/pregunta es:
¿Cómo puedo hacer que funcione en el paquete que importa esta biblioteca de componentes (un proyecto SvelteKit)?

He intentado agregar las imágenes como una carpeta estática en Rollup, para que aparezcan en la carpeta “dist” de la biblioteca, pero no encuentro documentación sobre cómo llevarlas de allí a la aplicación/Vite.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para que las imágenes funcionen en el paquete que importa la biblioteca de componentes en un proyecto de SvelteKit, es necesario configurar correctamente los activos estáticos de tu proyecto de SvelteKit.

    Primero, mueve la carpeta static que contiene las imágenes a la raíz de tu biblioteca de componentes. Luego, en tu archivo package.json, agrega un campo svelte y un campo files de la siguiente manera:

    {
      "name": "mi-biblioteca-de-componentes",
      "version": "1.0.0",
      "svelte": "src/index.js",
      "files": [
        "dist",
        "static"
      ],
      // otros campos
    }
    

    El campo svelte le indica a SvelteKit qué archivo utilizar como punto de entrada para tu biblioteca de componentes. Debe ser la ruta de tu archivo JavaScript principal que exporta tus componentes. El campo files le indica a npm qué archivos incluir al publicar tu paquete.

    A continuación, en tu proyecto de SvelteKit, crea una nueva carpeta llamada static en el directorio raíz si aún no existe. Luego, agrega un archivo vite.config.js en la raíz del proyecto de SvelteKit con la siguiente configuración:

    import { defineConfig } from 'vite';
    
    export default defineConfig({
      build: {
        rollupOptions: {
          input: {
            main: 'src/main.js',
          },
          output: {
            dir: 'dist',
            entryFileNames: '[name].[hash].js',
            assetFileNames: '[name].[hash][extname]',
            chunkFileNames: '_chunks/[name].[hash].js',
            plugins: [
              {
                name: 'copy-assets',
                writeBundle() {
                  this.emitFile({
                    type: 'asset',
                    fileName: 'image.png',
                    source: // reemplaza con el código fuente de la imagen de la biblioteca de componentes,
                  });
                },
              },
            ],
          },
        },
      },
    });
    

    El complemento copy-assets le indica a Rollup que copie la imagen de tu biblioteca de componentes a la carpeta dist en tu proyecto de SvelteKit cuando se compile.

    Finalmente, actualiza la etiqueta de imagen en tu biblioteca de componentes para utilizar la nueva ruta de la imagen:

    <img src="/image.png">
    

    Cuando ejecutes npm run build en tu biblioteca de componentes y luego npm run dev en tu proyecto de SvelteKit, la imagen debería cargarse correctamente.

Comments are closed.