J'ai construit ma première application React complète, et elle fonctionne à merveille. Je charge mon dev-server et tout se charge exactement comme je l'espère. Notamment, mes fichiers d'image se chargent parfaitement.Chargement de fichiers image en production - Réagissez
Un exemple d'une charge d'image réussie sur mon serveur dev:
<img src='./img/sq/filename.jpg' />
Lors de l'exécution du serveur dev, quand je visite cet élément dans la console et aller aux « sources », je vois le fichier arbre comme ceci:
- localhost:3333
- css [folder]
- js [folder]
- img/sq [folder]
- filename.jpg
- index [file]
C'est que je me attends.
Toutefois, lors de l'exécution du serveur de production , l'image ne se charge pas. Quand j'inspecte l'élément, et aller aux « sources », ce que je vois à la place:
- localhost:3000
- static [folder]
- css [folder]
- js [folder]
- index [file]
Donc, ma version de production est apparemment le dossier en ignorant /img/sq
tout à fait.
J'ai entendu parler de chargeur de fichiers et d'url-loader, mais je n'ai pas encore trouvé une explication claire et simple de ce qu'ils font et comment les utiliser. J'ai installé à la fois à mes dépendances avec succès, et j'ai ajouté ce chargeur à mon dossier webpack.config.js:
{
test: /\.(jpe?g|png|gif|svg)$/i,
loaders: [
'file?hash=sha512&digest=hex&name=[hash].[ext]',
'image-webpack?bypassOnDebug&optimizationLevel=7&interlaced=false'
]
}
Après avoir fait cela, je ne sais pas comment cela est censé changer la façon les images se chargent. Dois-je changer la façon dont l'image est référencée? Toute aide/pointeurs serait massivement apprécié, car cela m'a bloqué.
MISE À JOUR:
Ceci est mon fichier server.js. Je ne vois pas de différence radicale entre le code que vous avez publié et le mien, sauf pour moi en utilisant la méthode res.render
, à votre res.sendFile
.
Y at-il quelque chose que j'ai peut-être manqué ici?
server.js
var express = require('express')
var app = express();
app.use('/static', express.static(__dirname + '/static'));
app.set('views', __dirname + '/views');
app.set('view engine', 'ejs');
app.get('*', function (req, res) {
res.render("index");
});
const port = process.env.PORT || 3000;
const env = process.env.NODE_ENV || 'production';
app.listen(port, err => {
if (err) {
return console.error(err);
}
console.info(`Server running on http://localhost:${port} [${env}]`);
});
Il s'agit davantage d'une question de serveur node.js (pas de réaction). Vous pouvez jeter un oeil à cela pour un 'remplacement des solutions existantes de vue côté serveur' https://github.com/reactjs/express-react-views – RLaaa
Notez que vous utilisez ejs view engine, et mon serveur n'est pas . Je vous recommande également de regarder la section de déploiement de 'create-react-app' https://github.com/facebookincubator/create-react-app/blob/master/packages/react-scripts/template/README.md# déploiement – RLaaa