Я создаю небольшое приложение для реагирования, и мои локальные изображения не загружаются. Изображения вроде placehold.it/200x200
загружаются. Подумал может может быть что то с сервером?
Вот мой App.js
import React, { Component } from 'react';
class App extends Component {
render() {
return (
<div className="home-container">
<div className="home-content">
<div className="home-text">
<h1>foo</h1>
</div>
<div className="home-arrow">
<p className="arrow-text">
Vzdělání
</p>
<img src={"/images/resto.png"} />
</div>
</div>
</div>
);
}
}
export default App;
index.js:
import React, { Component } from 'react';
import { render } from 'react-dom';
import { Router, Route, Link } from 'react-router';
import { createHistory } from 'history';
import App from './components/app';
let history = createHistory();
render(
<Router history={history} >
<Route path="/" component={App} >
<Route path="vzdelani" component="" />
<Route path="znalosti" component="" />
<Route path="prace" component="" />
<Route path="kontakt" component="" />
</Route>
<Route path="*" component="" />
</Router>,
document.getElementById('app')
);
и server.js:
var path = require('path');
var express = require('express');
var webpack = require('webpack');
var config = require('./webpack.config.dev');
var app = express();
var compiler = webpack(config);
app.use(require('webpack-dev-middleware')(compiler, {
noInfo: true,
publicPath: config.output.publicPath
}));
app.use(require('webpack-hot-middleware')(compiler));
app.get('*', function(req, res) {
res.sendFile(path.join(__dirname, 'index.html'));
});
app.listen(3000, 'localhost', function(err) {
if (err) {
console.log(err);
return;
}
console.log('Listening at http://localhost:3000');
});
javascript
reactjs
Petrba
источник
источник
require()
. например src = {require ("image path")}Ответы:
При использовании Webpack вам нужны
require
изображения, чтобы Webpack мог их обрабатывать, что объясняет, почему внешние изображения загружаются, а внутренние - нет, поэтому вместо<img src={"/images/resto.png"} />
вам нужно использовать<img src={require('/images/image-name.png')} />
замену image-name.png на правильное имя изображения для каждого из них. Таким образом, Webpack сможет обрабатывать и заменять исходный img.источник
import {require} from 'browserify'
. Но это не работает.require
. Он предоставляется как частьcommonjs
. См stackoverflow.com/a/33251937/4103908 и viget.com/articles/gulp-browserify-starter-faq для получения дополнительной информации , которая может помочь вам с помощью требуют и browserify с помощью Глоток.Module not found: Error: Can't resolve 'MyPNG.png' in 'C:...\app\components\images'
. Путь к файлу выглядит хорошо !.Я начал создавать свое приложение с помощью create-react-app (см. Вкладку «Создание нового приложения»). README.md, поставляемый с ним, дает следующий пример:
Это отлично сработало для меня. Вот ссылка на главный документ для этого README , в котором объясняется (отрывок):
источник
Unexpected character '�' (1:0) > 1 | �PNG | ^ 2 | 3 | 4 | IHDR��r~ipHYs���o�d��IDATx^�}���Ü�d7�w¿½ï¿½ ��JzH!�K�ï
...Другой способ сделать:
Во- первых, установить эти модули:
url-loader
,file-loader
Используя npm:
npm install --save-dev url-loader file-loader
Затем добавьте это в свою конфигурацию Webpack:
limit
: Ограничение байтов для встроенных файлов в качестве URL-адреса данныхВам необходимо установить оба модуля:
url-loader
иfile-loader
Наконец, вы можете:
Вы можете подробнее изучить эти загрузчики здесь:
url-загрузчик: https://www.npmjs.com/package/url-loader
файл-загрузчик: https://www.npmjs.com/package/file-loader
источник
npm install --save-dev url-loader
Module build failed: SyntaxError: c:/contrivedpath/images/profile.jpg: Unexpected character '�' (1:0)
, все, что вам нужно сделать, это добавить эту конфигурацию url-loader выше в конфигурацию вашего webpack, установить npmurl-loader
Иfile-loader
и вы быть функциональным. Я протестировал, чтобы убедиться, нужен загрузчик файлов.ERROR in ./src/images/imagename.png Module parse failed: Unexpected character '�' (1:0)
сообщение. Любые идеи?src=[Object module]
а когда я наводю указатель мыши, он говорит: «Не удалось загрузить изображение»На самом деле я хотел бы прокомментировать, но я еще не авторизован. Вот почему это делает вид, что это следующий ответ, а это не так.
Я хотел бы продолжить этот путь. Это работает плавно, когда есть изображение, которое можно просто вставить. В моем случае это немного сложнее: мне нужно сопоставить несколько изображений. Пока что единственный работоспособный способ сделать это, который я нашел, заключается в следующем
Итак, мой вопрос: есть ли более простые способы обработки этих изображений? Излишне говорить, что в более общем случае количество файлов, которые необходимо буквально импортировать, может быть огромным, как и количество ключей в объекте. (Объект в этом коде явно задействован для ссылки по именам - его ключам) В моем случае процедуры, связанные с требованиями, не работали - загрузчики генерировали ошибки странного типа во время установки и не показывали никаких признаков работы; и требование само по себе тоже не сработало.
источник
Я просто хотел оставить следующее, что усиливает принятый выше ответ.
В дополнение к принятому ответу вы можете немного облегчить себе жизнь, указав
alias
путь в Webpack, поэтому вам не нужно беспокоиться о том, где находится изображение относительно файла, в котором вы сейчас находитесь. См. Пример ниже :Файл Webpack:
Использование:
источник
Я тоже хотел бы добавить к ответам @Hawkeye Parker и @Kiszuriwalilibori:
Как было отмечено , из документации здесь , это , как правило , лучше всего , чтобы импортировать изображения по мере необходимости.
Однако мне нужно было динамически загружать много файлов, что заставило меня поместить изображения в общую папку ( также указанную в README ) из-за этой рекомендации ниже из документации:
Надеюсь, это поможет кому-то другому! Оставьте мне комментарий, если мне нужно что-то прояснить.
источник
Я разрабатываю проект, который использует SSR, и теперь я хочу поделиться своим решением на основе некоторых ответов здесь.
Моя цель - предварительно загрузить изображение, чтобы показывать его при офлайн-подключении к Интернету. (Возможно, это не лучшая практика, но, поскольку это работает для меня, пока все в порядке) К вашему сведению, я также использую ReactHooks в этом проекте.
Чтобы использовать изображение, я пишу его так
источник
Попробуйте изменить код в server.js на -
источник
Иногда вы можете ввести вместо местоположения изображения / src: попробуйте
вместо того
источник
Использование атрибута src таким образом означает, что ваше изображение будет загружено с абсолютного пути "/images/resto.png" для вашего сайта. Каталог изображений должен находиться в корне вашего сайта. Пример: http://www.example.com/images/resto.png
источник
Вот что у меня сработало. Во-первых, давайте разберемся с проблемой. Вы не можете использовать переменную как требуемый аргумент. Webpack необходимо знать, какие файлы нужно объединить во время компиляции.
Когда я получил ошибку, я подумал, что это может быть связано с проблемой пути, как в абсолютном и относительном. Поэтому я передал жестко запрограммированное значение, как показано ниже: <img src = {require ("../ assets / images / photosnap.svg")} alt = "" />. Он работал нормально. Но в моем случае значение - это переменная, поступающая из реквизита. Я попытался передать строковую буквальную переменную, как предлагали некоторые. Это не работает. Также я попытался определить локальный метод, используя случай переключения для всех 10 значений (я знал, что это не лучшее решение, но я просто хотел, чтобы оно как-то работало). Это тоже не сработало. Затем я узнал, что мы НЕ можем передавать переменную в require.
В качестве обходного пути я изменил данные в файле data.json, чтобы ограничить их только именем моего изображения. Это имя изображения, полученное из реквизита как строковый литерал. Я соединил его с жестко закодированным значением, например:
Фактическое значение, содержащееся в логотипе, будет происходить из файла data.json и будет относиться к некоторому имени изображения, например photosnap.svg.
источник
Лучший способ загрузить локальные изображения в React выглядит следующим образом
Например, храните все свои изображения (или любые ресурсы, такие как видео, шрифты) в общей папке, как показано ниже.
Просто напишите,
<img src='/assets/images/Call.svg' />
чтобы получить доступ к изображению Call.svg из любого вашего компонента реакцииПримечание: хранение ваших ресурсов в общей папке гарантирует, что вы можете получить к ним доступ из любого места из проекта, просто указав '/ path_to_image' и не требуя какого-либо обхода пути '../../', как это
источник
вы должны сначала импортировать изображение, а затем использовать его. У меня это сработало.
источник