Я использую Create React App, и я хотел бы включить свой SVG-файл в качестве URI данных.
Я знаю, что CRA позволяет мне импортировать и визуализировать SVG как компонент, например:
import { ReactComponent as Logo } from './logo.svg';
// <Logo />
И я знаю, что могу получить URL SVG:
import Logo from './logo.svg';
// <img src={Logo} />
Но я хотел бы встроить содержимое SVG в качестве URI данных, как в:
<img src="data:image/svg+xml;utf8,<svg>...</svg>">
Я знаю, svg-url-loader может сделать это. Поэтому я настроил его (используя Rescripts , потому что CRA ограничивает изменение конфигурации Webpack):
function addSvgLoader(config) {
config.module.rules.push({
test: /\.svg/,
use: {
loader: "svg-url-loader",
options: {
limit: 15000,
},
},
});
return config;
}
module.exports = [addSvgLoader];
С этим, теоретически, я смогу использовать мой второй пример выше и вместо получения URL-адреса с отпечатками пальцев получите встроенный URI данных. Тем не менее, отпечатанный URL-адрес по-прежнему отображается, и содержимое файла SVG теперь выглядит следующим образом:
module.exports = "data:image/svg+xml,%3Csvg role='img' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M0 24V0h24v24H0zM ... [truncated] ... 03h-.52l-.23.02z'/%3E%3C/svg%3E"
Я подозреваю, что это конфликт между загрузчиком CRA svg-url-loader
, но я не смог найти решение. Если есть альтернатива svg-url-loader
, я бы тоже это учел.