Мой случай следующий:
Я создаю библиотеку компонентов для 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">
Спасибо за вашу помощь !
Дэмиен
Я получаю статус 200 для URL-адреса локальный: 3000/92be5c546b4adf43.gif. У меня такое ощущение, что моя фотография неправильно экспонирована.
Я нашел решение (см. мой следующий ответ). Спасибо за ваш ответ!



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Я нашел решение этой проблемы. Этот ответ может помочь кому-то:
Я обновляю конфигурацию своего накопительного пакета, чтобы использовать накопительный плагин-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
Когда я обновил свой конфиг, чтобы увеличить лимит, все в порядке
посмотрите на вкладку сети devtools - пытаются ли загрузить изображения? у тебя 404? с какого пути они пытаются загрузиться?