Comment regrouper une Réagir application dans un sous-répertoire sur un serveur?
J'ai une Réagir application que j'ai développé sur mon localhost. Je veux le copier sur un serveur dans un sous-répertoire appelé vensa.
Mon webpack fichier de configuration ressemble à ça..
const ExtractTextPlugin = require('extract-text-webpack-plugin');
module.exports = {
entry: [
'./src/index.js'
],
output: {
path: 'build',
filename: 'bundle.js'
},
module: {
loaders: [
{
test: /\.js$/,
exclude: /node_modules/,
loader: 'babel'
},
{
test: /\.scss$/,
loader: ExtractTextPlugin.extract('style', 'css!sass')
},
{
test: /\.css$/,
loader: ExtractTextPlugin.extract('style', 'css')
},
{
test: /\.(png|eot|svg|ttf|woff(2)?)(\?v=\d+\.\d+\.\d+)?/,
loader: 'url'
}
]
},
plugins: [
new ExtractTextPlugin('vensa-dashboard.css')
],
devServer: {
historyApiFallback: true,
contentBase: './build'
}
};
L'index.html fichier ressemble à ceci...
<!DOCTYPE html>
<html>
<head>
<title>Vensa Development Test</title>
<link rel="stylesheet" href="/vensa-dashboard.css">
</head>
<body>
<div class="container"></div>
<script src="/bundle.js"></script>
</body>
</html>
et mon routes.js fichier est...
import React from 'react';
import { Route, IndexRoute } from 'react-router';
import VensaDashboard from './components/VensaDashboard';
import Inbox from './components/Inbox';
import Todo from './components/Todo';
import Home from './components/Home';
export default (
<Route path="/" component={VensaDashboard}>
<IndexRoute component={Home} />
<Route path="/message" component={Inbox} />
<Route path="/todo/:todoPage" component={Todo} />
</Route>
);
Cependant, si je n'il suffit d'exécuter webpack -p
et copiez les 3 fichiers sur ce sous-répertoire, il ne fonctionne pas comme le chemin de la racine est /
et il ne peut pas trouver les fichiers css et js. Je ne suis pas sûr de ce que (la meilleure façon) à changer (probablement de l'une ou de l'ensemble de ces 3 fichiers) pour qu'il fonctionne dans un sous-répertoire?
La totalité du code source de l'application est ici dans le cas qui aide.
Merci!
OriginalL'auteur magician11 | 2016-05-23
Vous devez vous connecter pour publier un commentaire.
Si vous utilisez Réagir Routeur v4, vous devriez être en mesure de définir à l'aide de basename={
foobar
}.Lien vers les docs: https://reacttraining.com/react-router/web/api/BrowserRouter
Remarque: si vous utilisez créer-réagir-app dans un sous-répertoire que vous voulez aussi de définir
"homepage": "/foobar/",
dans votre forfait.fichier json. Donc, la production d'accumuler des points dans le droit chemin.hey! pouvez-vous s'il vous plaît partager un exemple de cela? Je suis aussi coincé avec ce.
Par exemple <BrowserRouter basename="/calendrier" /> <Lien="/aujourd'hui" /> .. rend <a href="/agenda/aujourd'hui"> à Partir de la documentation.
Cela fonctionne pour la production, mais je suis toujours à la recherche d'une solution pour le développement sur le port :3000, j'ai utiliser une solution de contournement, par exemple: ajouter manuellement l'inclusion de l'ensemble avec un chemin d'accès relatif (le dev build produit un bsolute chemin de la racine) : j'ai ajouté <script type="text/javascript" src="static/js/bundle.js"></script> index.html
omg, c'est super. sauvé ma journée, merci beaucoup!!!
OriginalL'auteur trenthogan
J'ai dû faire quelque chose de similaire récemment afin d'obtenir une réagir application qui s'exécute dans un sous-répertoire. Essayez de le ci-dessous et voir comment vous vous y prenez.
Vous pouvez également mettre à jour le chemin d'accès à votre bundle.js fichier dans index.html comme indiqué ci-dessous
OriginalL'auteur Rusta
Utiliser le html-webpack-plugin pour générer votre final
index.html
avec le bon bundle noms automatiquement injecté dans.Puis définissez de sortie.publicPath dans votre webpack config dire webpack le sous-répertoire de votre actif sera déployé à:
[Error] Warning: [react-router] Location "/vensa/" did not match any routes
Oui je crois que lorsque vous créez l'Histoire de l'objet de votre routeur, il y a une option basepath vous pouvez passer
/vensa
et puis routeur devrait fonctionner.Oui je vois github.com/reactjs/react-router/blob/master/docs/guides/... mais vous ne savez pas comment l'utiliser avec browserHistory que je suis en train de l'utiliser. Connaissez-vous @Brandon ?
Ne pas utiliser le pré-créé
browserHistory
. Au lieu de créer votre propre en appelantcreateHistory
- vous comme le premier exemple ici: github.com/reactjs/react-router/blob/master/docs/guides/... l'Utilisation quehistory
les objets que vous créez au lieu debrowserHistory
.OriginalL'auteur Brandon
Ou vous pouvez utiliser une variable d'environnement pour régler tous vos liens manuellement.
L'un de vos itinéraires:
Alors vos liens:
Cela a très bien fonctionné pour moi. Surtout depuis que je suis en utilisant preact, dont preact-routeur n'est pas vraiment favorable à l'basename en ce moment.
OriginalL'auteur lastlink
Ajoutant à trenthogan réponse, nous pouvons attribuer basename à l'emplacement.chemin
Avec ce changement, l'application fonctionne même si le sous-répertoire changements de chemin d'accès dans l'avenir.
Oui Larzan vous avez raison lorsque nous passer directement à la page d'un problème, la page affiche désormais le principal contenu de la page. Mais les liens vers les fichiers problème ne vient pas ici, il ne vient que lorsque nous répéter ce comportement une fois de plus. Ont créer une démo pour la même chose.
OriginalL'auteur Ramanathan Muthuraman
Dans ma situation, j'avais besoin de l'appui d'un scénario, où il pourrait y avoir de 0 à de nombreux sous-dossiers avec des noms inconnus et de production utilise uniquement les fichiers statiques.
Dans mon App.js, j'ai défini cette fonction simple:
Que j'utilise pour définir le nom de base:
Cela fonctionne avec aucun sous-dossier ainsi que de nombreux sous-dossiers et il peut gérer la recharge.
OriginalL'auteur Ragnar
'./src/index.js'
et que le chemin qu'il va construire estvensa
. Ce qui se passe avec le nom de fichier et de hachage? Merci @krotovDésolé, je suis en utilisant
[name]
comme je l'ai utiliser différents points d'entrée.[hash] is replaced by the hash of the compilation.
Vous pouvez voir plus sur webpack config ici @magician11OriginalL'auteur Vladimirs Matusevics