Включить изображения в пакет JS

Мой случай следующий:

Я создаю библиотеку компонентов для React. Итак, у меня есть пакет (в комплекте с Rollup), который включает в себя несколько изображений (пока только изображение GIF, которое используется в компоненте).

Компонент, использующий мое изображение, выглядит следующим образом:

import React from 'react';
import PropTypes from 'prop-types';
import ui_spinner from '../../../assets/ui_progress.gif';

/**
 * CircularSpinner
 * Add a spinner when the user needs to wait
 */
class CircularSpinner extends React.PureComponent {
  static propTypes = {
    /** Width of the component */
    width: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),
    /** Height of the component */
    height: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),
    /** Style of the component (overload existing properties) */
    style: PropTypes.object,
  }

  static defaultProps = {
    width: 128,
    height: 128,
    style: {},
  }

  render() {
    const { style, width, height } = this.props;

    return (
      <img src = {ui_spinner} width = {width} height = {height} style = {style} alt = "ui_progress" aria-busy = "true" />
    );
  }
}

export default CircularSpinner;

Когда я его построил, все в порядке.

Теперь я создаю приложение React с помощью create-react-app и хочу протестировать свою библиотеку компонентов. Для этого я использую npm link (чтобы избежать принудительного развертывания моего пакета npm). Мои компоненты в моем тестовом приложении в порядке, но изображение (GIF в моем компоненте CircularSpinner) не отображается.

Итак, мой вопрос заключается в следующем: как включить некоторые ресурсы в пакет JS с помощью Rollup? Мой рабочий подход правильный?

Моя конфигурация Rollup выглядит следующим образом:

import { uglify } from 'rollup-plugin-uglify'
import babel from 'rollup-plugin-babel'
import url from 'rollup-plugin-url'

const config = {
  input: 'src/index.js',
  external: ['react'],
  output: {
      format: 'umd',
      name: 'react-components',
      globals: {
          react: "React"
      }
  },
  plugins: [
    babel({
      exclude: "node_modules/**"
    }),
    uglify(),
    url(),
  ]
}
export default config

Я строю с rollup -c -o dist/index.js.

И папка dist имеет следующее содержимое:

dist/
  assets
    92be5c546b4adf43.gif
  index.js

Мой компонент, который использует мое изображение, выглядит следующим образом в моем тестовом приложении:

<img src = "92be5c546b4adf43.gif" width = "128" height = "128" alt = "ui_progress" aria-busy = "true">

Спасибо за вашу помощь !

Дэмиен

посмотрите на вкладку сети devtools - пытаются ли загрузить изображения? у тебя 404? с какого пути они пытаются загрузиться?

jsdeveloper 15.03.2019 17:37

Я получаю статус 200 для URL-адреса локальный: 3000/92be5c546b4adf43.gif. У меня такое ощущение, что моя фотография неправильно экспонирована.

Damien LD 18.03.2019 08:54

Я нашел решение (см. мой следующий ответ). Спасибо за ваш ответ!

Damien LD 18.03.2019 09:20
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
3
1 185
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я нашел решение этой проблемы. Этот ответ может помочь кому-то:

Я обновляю конфигурацию своего накопительного пакета, чтобы использовать накопительный плагин-img. Я уже использовал его, но моя конфигурация была неправильной:

Правильная конфигурация следующая:

import { uglify } from 'rollup-plugin-uglify'
import babel from 'rollup-plugin-babel'
import image from 'rollup-plugin-img'

const config = {
  input: 'src/index.js',
  external: ['react'],
  output: {
      format: 'umd',
      name: 'react-components',
      globals: {
          react: "React"
      }
  },
  plugins: [
    babel({
      exclude: "node_modules/**"
    }),
    image({
      limit: 100000,
    }),
    uglify(),
  ]
}
export default config

Моя ошибка заключалась в том, что мой GIF немного велик, а предельный размер по умолчанию составляет 8192 байта. В этом случае у меня следующая ошибка:

Error: Could not load <path of image> (imported by <path of component that use image>): The "path" argument must be of type string. Received type undefined

Когда я обновил свой конфиг, чтобы увеличить лимит, все в порядке

Другие вопросы по теме