2016-08-05 6 views
0

Ich entwickle derzeit eine React-Redux Appliaction mit Webpack & npm.Nach der Bereitstellung von [react-router] "hat keine Routen gefunden"

Während der Entwicklung laufe ich "start": "node server.js" (von meinem Paket.json) und meine App ist dann unter localhost:3000/myApp erreichbar.

Aber ich möchte diese App für andere Benutzer verfügbar machen. Ich habe einen Linux-Server mit Apache, wo einige meiner früheren jQuery-Apps laufen, die gut funktionieren.

Um jedoch meine React App zu bündeln, starte ich "production": "webpack -p" und die Ausgabe davon ist /dist/bundle.js. Danach habe ich eine HTML-Datei auf, die die bundle.js sowohl auf dem

Server setzen
<!DOCTYPE html> 
    <html> 
<head> 
    <title>Urlaub-planer</title> 

    <!-- Latest compiled and minified CSS --> 
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css"> 
    <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet"> 
    <!--<link rel="stylesheet" href="./Urlaubspalner/css/daterangepicker.css" type="text/css">--> 
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.2/jquery.min.js">   </script> 

    <!-- Auth0Lock script --> 
    <script src="//cdn.auth0.com/js/lock-9.0.min.js"></script> 
    </head> 
    <body> 
    <div class="todoapp" id="root"></div> 
     <script src="./bundle.js"></script> 
    </body> 
    </html> 

Beim Versuch, ich folgende Fehlermeldung bekam zuzugreifen:

browser.js?26d3:49Warning: [react-router] Location "/test/index.html" did not match any routes

Dies ist die Datei, in der meine Routen definiert

import React from 'react' 
import { render } from 'react-dom' 
import { createStore, applyMiddleware } from 'redux' 
import { Provider } from 'react-redux' 
import {Router, Route, IndexRoute, browserHistory} from 'react-router' 
import createLogger from 'redux-logger' 

import App from './containers/App' 
import VacationSummary from './containers/vacation/VacationSummary' 
import VacationRequest from './containers/vacation/VacationRequest' 
import VacationRequestSummary from './containers/vacation/VacationRequestSummary' 

import Home from './containers/Home' 
import Demo from './components/Demo' 
import rootReducer from './reducers/reducers' 
import thunkMiddleware from 'redux-thunk' 

var injectTapEventPlugin = require("react-tap-event-plugin"); 
injectTapEventPlugin(); 

const logger = createLogger(); 

    let createStoreWithMiddleware = applyMiddleware(thunkMiddleware, logger) (createStore) 

    let store = createStoreWithMiddleware(rootReducer) 

    let rootElement = document.getElementById('root') 

    if (module.hot) { 
    // Enable Webpack hot module replacement for reducers 
    module.hot.accept('./reducers',() => { 
    const nextRootReducer = require('./reducers').default 
    store.replaceReducer(nextRootReducer) 
    }) 
    } 

    render(
    <Provider store={store}> 
     <Router history={browserHistory}> 
     <Route path="/" component={App}> 
     <Route path="Home" component={Home}/> 
     <Route path="VacationSummary" component={VacationSummary}/> 
     <Route path="VacationRequest" component={VacationRequest}/> 
     <Route path="VacationRequestSummary" component= {VacationRequestSummary}/> 
    </Route> 
    </Router> 
    </Provider>, 
    rootElement 
) 

ich habe auf SO mit einem ähnlichen Zweck mehrere Fragen gefunden, aber sie sind meist Probleme auftreten, beim laufen th ist mit dem webpack-dev-server. Ich möchte es wie gesagt auf meinem traditionellen Apache-Server.

Was muss ich tun, damit dies außerhalb meiner Entwicklungsumgebung funktioniert? Sorry, wenn das Q zu einfach ist, aber es ist mein erstes Projekt, das all diese neuen npm, webpack, node ... stuff und so weiter benutzt.

Schließlich mein package.json

{ 
    "name": "Urlaubsplaner", 
    "version": "0.0.1", 
    "main": "index.js", 
    "scripts": { 
    "server": "node server/server.js", 
     "start": "node server.js", 
     "watch": "webpack --watch", 
     "production": "webpack -p" 
    }, 
    "author": "Auth0", 
    "license": "MIT", 
    "dependencies": { 
    "classnames": "^2.2.5", 
    "css-loader": "^0.23.1", 
     "material-ui": "^0.15.2", 
    "moment": "^2.13.0", 
    "react": "^15.1.0", 
    "react-bootstrap-daterangepicker": "^3.1.0", 
    "react-dom": "*", 
    "react-redux": "*", 
    "react-router": "*", 
     "react-tabs": "^0.7.0", 
     "react-tap-event-plugin": "^1.0.0", 
     "react-yearly-calendar": "^1.1.4", 
    "redux": "*", 
    "redux-form": "^5.2.5", 
    "redux-logger": "^2.6.1", 
     "redux-thunk": "*", 
    "style-loader": "^0.13.1" 
    }, 
    "devDependencies": { 
    "babel-core": "^5.6.18", 
    "babel-loader": "^5.1.4", 
    "babel-plugin-react-transform": "^1.1.0", 
    "express": "^4.13.3", 
    "webpack": "^1.9.11", 
    "webpack-dev-middleware": "^1.2.0", 
    "webpack-hot-middleware": "^2.2.0" 
    } 
    } 

Und mein webpack.config

var path = require('path') 
var webpack = require('webpack') 

module.exports = { 
    devtool: 'cheap-module-eval-source-map', 
    entry: [ 
    'webpack-hot-middleware/client', 
    './index' 
    ], 
    output: { 
    path: path.join(__dirname, 'dist'), 
    filename: 'bundle.js', 
    publicPath: '/static/' 
    }, 
    plugins: [ 
    new webpack.optimize.OccurenceOrderPlugin(), 
    new webpack.HotModuleReplacementPlugin(), 
    new webpack.NoErrorsPlugin() 
    ], 
    module: { 
    loaders: [ 
     { test: /\.css$/, loader: "style-loader!css-loader" }, 
     {test: /\.js$/, 
     loaders: [ 'babel' ], 
     exclude: /node_modules/, 
     include: __dirname 
     }] 
    } 
    } 

Grüße.

Antwort

0

nach Ihren aktuellen reagieren Router Pfade folgenden Links funktionieren würde: -

  • /
  • /VacationSummary
  • /VacationRequest
  • /VacationRequestSummary

ich nicht finden können/Test /home.html route überall in Ihrem Reag-Router. Es würde also sicher einen Fehler auslösen. Auch brauchen Sie nicht spezifische .html am Ende für Links.

Auch würde ich vorschlagen, dass Sie Ihre/Home Index Route statt Route.

Jetzt sind Sie localhost: 3000/myApp funktioniert das, weil es nicht als myApp nicht in Ihrem Router URLs ist.

So sollte Ihre Homepage (oder index.html) auf localhost: 3000 von dem Code zugegriffen werden, den Sie oben geteilt haben.

+0

Die Seiten sind unter localhost: 3000 erreichbar, aber dies geschieht über einen Knotenserver. Aber ich möchte es nur über einen normalen Apache-Server laufen, der auf einer anderen Domain ist. Und jedes Mal, wenn ich eine index.html drücke, die die Datei bundle.js von/dist auf meinem Server enthält, sagt sie, dass sie nicht mit Routen übereinstimmt – BayLife

Verwandte Themen