Ich baue eine kleine Reaktions-App und meine lokalen Bilder werden nicht geladen. Bilder mögen placehold.it/200x200
Lasten. Ich dachte, vielleicht könnte es etwas mit dem Server sein?
Hier ist meine 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')
);
und 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
quelle
quelle
require()
. zB src = {require ("image path")}Antworten:
Wenn Sie Webpack verwenden, müssen Sie
require
Bilder erstellen, damit Webpack sie verarbeiten kann. Dies würde erklären, warum externe Bilder geladen werden, während interne nicht geladen werden. Stattdessen müssen<img src={"/images/resto.png"} />
Sie<img src={require('/images/image-name.png')} />
image-name.png durch den richtigen Bildnamen für jedes von ihnen ersetzen. Auf diese Weise kann Webpack das Quell-Img verarbeiten und ersetzen.quelle
import {require} from 'browserify'
. Aber es funktioniert nicht.require
. Es wird als Teil von bereitgestelltcommonjs
. Siehe stackoverflow.com/a/33251937/4103908 und viget.com/articles/gulp-browserify-starter-faq für weitere Details , die helfen könnten Sie ggf. auf die Verwendung und browserify Gulp verwenden.Module not found: Error: Can't resolve 'MyPNG.png' in 'C:...\app\components\images'
. Der Pfad zur Datei sieht gut aus!.Ich habe mit dem Erstellen meiner App mit der Create -React-App begonnen (siehe Registerkarte "Neue App erstellen"). Die mitgelieferte README.md enthält das folgende Beispiel:
Das hat bei mir perfekt funktioniert. Hier ist ein Link zum Master-Dokument für diese README , der erklärt (Auszug):
quelle
Unexpected character '�' (1:0) > 1 | �PNG | ^ 2 | 3 | 4 | IHDR��r~ipHYs���o�d��IDATx^�}���Ü�d7�w¿½ï¿½ ��JzH!�K�ï
...Ein anderer Weg zu tun:
Zuerst installieren Sie diese Module:
url-loader
,file-loader
Verwenden von npm:
npm install --save-dev url-loader file-loader
Fügen Sie dies als Nächstes Ihrer Webpack-Konfiguration hinzu:
limit
: Byte-Limit für Inline-Dateien als Daten-URLSie müssen beide Module installieren :
url-loader
undfile-loader
Schließlich können Sie Folgendes tun:
Sie können diese Lader hier weiter untersuchen:
URL-Loader: https://www.npmjs.com/package/url-loader
Dateilader: https://www.npmjs.com/package/file-loader
quelle
npm install --save-dev url-loader
Module build failed: SyntaxError: c:/contrivedpath/images/profile.jpg: Unexpected character '�' (1:0)
Probleme damit und dieser Beitrag war heute Morgen tatsächlich auf meinem Bildschirm :) Wenn Sie so etwas sehen , müssen Sie nur diese obige URL-Loader-Konfiguration zu Ihrer Webpack-Konfiguration hinzufügen, npm installierenurl-loader
UNDfile-loader
und Sie werden funktional sein. Ich habe getestet, um sicherzugehen, und File-Loader ist notwendig.ERROR in ./src/images/imagename.png Module parse failed: Unexpected character '�' (1:0)
Nachricht. Irgendwelche Ideen?src=[Object module]
und wenn ich mit der Maus darüberEigentlich möchte ich einen Kommentar abgeben, bin aber noch nicht autorisiert. Deshalb gibt das vor, die nächste Antwort zu sein, obwohl dies nicht der Fall ist.
Ich möchte diesen Weg fortsetzen. Das funktioniert reibungslos, wenn man ein Bild hat, das man einfach einfügen kann. In meinem Fall ist das etwas komplexer: Ich muss mehrere Bilder darauf abbilden. Bisher habe ich nur folgende Möglichkeiten gefunden
Meine Frage ist also, ob es einfachere Möglichkeiten gibt, diese Bilder zu verarbeiten. Es ist unnötig zu erwähnen, dass im Allgemeinen die Anzahl der Dateien, die buchstäblich importiert werden müssen, sehr groß sein kann und auch die Anzahl der Schlüssel im Objekt. (Das Objekt in diesem Code ist eindeutig mit Namen versehen - seine Schlüssel.) In meinem Fall haben die erforderlichen Verfahren nicht funktioniert. Die Lader haben während der Installation Fehler seltsamer Art erzeugt und keine Arbeitszeichen angezeigt. und erfordern an sich hat auch nicht funktioniert.
quelle
Ich wollte nur das Folgende hinterlassen, was die oben akzeptierte Antwort verbessert.
Zusätzlich zur akzeptierten Antwort können Sie Ihr eigenes Leben ein wenig vereinfachen, indem Sie einen
alias
Pfad in Webpack angeben, sodass Sie sich keine Sorgen machen müssen, wo sich das Bild relativ zu der Datei befindet, in der Sie sich gerade befinden. Siehe Beispiel unten ::Webpack-Datei:
Verwenden:
quelle
Auch ich möchte die Antworten von @Hawkeye Parker und @Kiszuriwalilibori ergänzen:
Wie aus den Dokumenten hier hervorgeht , ist es normalerweise am besten, die Bilder nach Bedarf zu importieren.
Ich musste jedoch viele Dateien dynamisch laden, was dazu führte, dass ich die Bilder in den öffentlichen Ordner legte ( ebenfalls in der README-Datei angegeben ), da in der folgenden Dokumentation empfohlen wurde:
Hoffe das hilft jemand anderem! Hinterlasse mir einen Kommentar, wenn ich etwas davon klären muss.
quelle
Ich entwickle ein Projekt, das SSR verwendet, und jetzt möchte ich meine Lösung anhand einiger Antworten hier teilen.
Mein Ziel ist es, ein Bild vorab zu laden, um es anzuzeigen, wenn die Internetverbindung offline ist. (Es ist vielleicht nicht die beste Vorgehensweise, aber da es für mich funktioniert, ist das vorerst in Ordnung.) Zu Ihrer Information, ich verwende auch ReactHooks in diesem Projekt.
Um das Bild zu verwenden, schreibe ich es so
quelle
Versuchen Sie, den Code in server.js in - zu ändern
quelle
Manchmal können Sie statt in Ihrem Bildspeicherort / src: try eingeben
anstatt
quelle
Wenn Sie das src-Attribut auf diese Weise verwenden, wird Ihr Bild aus dem absoluten Pfad "/images/resto.png" für Ihre Site geladen. Das Bilderverzeichnis sollte sich im Stammverzeichnis Ihrer Site befinden. Beispiel: http://www.example.com/images/resto.png
quelle
Hier ist, was für mich funktioniert hat. Lassen Sie uns zunächst das Problem verstehen. Sie können keine Variable als Argument für die Anforderung verwenden. Webpack muss wissen, welche Dateien zur Kompilierungszeit gebündelt werden müssen.
Als ich den Fehler bekam, dachte ich, dass er möglicherweise mit dem Pfadproblem zusammenhängt, wie in absolut oder relativ. Daher habe ich einen fest codierten Wert übergeben, der wie folgt erforderlich ist: <img src = {require ("../ assets / images / photosnap.svg")} alt = "" />. Es hat gut funktioniert. Aber in meinem Fall ist der Wert eine Variable, die von Requisiten stammt. Ich habe versucht, eine String-Literal-Variable zu übergeben, wie einige vorgeschlagen haben. Es hat nicht funktioniert. Außerdem habe ich versucht, eine lokale Methode mit switch case für alle 10 Werte zu definieren (ich wusste, dass dies nicht die beste Lösung ist, aber ich wollte nur, dass sie irgendwie funktioniert). Auch das hat nicht funktioniert. Dann habe ich erfahren, dass wir KEINE Variablen an die Anforderung übergeben können.
Um dieses Problem zu umgehen, habe ich die Daten in der Datei data.json so geändert, dass sie nur auf den Namen meines Bildes beschränkt sind. Dieser Bildname, der von den Requisiten als String-Literal stammt. Ich habe es wie folgt mit dem fest codierten Wert verkettet:
Der im Logo enthaltene tatsächliche Wert stammt aus der Datei data.json und verweist auf einen Bildnamen wie photosnap.svg.
quelle
Der beste Weg, um lokale Bilder in Reaktion zu laden, ist wie folgt
Bewahren Sie beispielsweise alle Ihre Bilder (oder Elemente wie Videos, Schriftarten) wie unten gezeigt im öffentlichen Ordner auf.
Schreiben Sie einfach,
<img src='/assets/images/Call.svg' />
um von einer Ihrer Reaktionskomponenten auf das Call.svg-Bild zuzugreifenHinweis: Wenn Sie Ihre Assets im öffentlichen Ordner belassen, können Sie von überall im Projekt darauf zugreifen, indem Sie einfach '/ path_to_image' angeben und keine Pfadüberquerung '../../' wie diese benötigen
quelle
Sie müssen das Bild zuerst importieren und dann verwenden. Es hat bei mir funktioniert.
quelle