2016-03-10 6 views
14

Mam aplikację z prostymi trasami. Działa dobrze, gdy używam serwera programującego Webpack. Teraz chcę wdrożyć go na moim serwerze produkcyjnym. Więc zbudowałem bundle.js. Jednak nie jestem pewien, jaki jest prawidłowy sposób obsługi pliku na serwerze.Jaki jest prawidłowy sposób obsługi produkcji reagować na bundle.js zbudowany przez WebPacka?

Większość postów na blogu zatrzymuje się przy budowaniu bundle.js lub wdrażaniu go w heroku lub nodejutsu. Co powinienem zrobić, jeśli chcę to zrobić na moim własnym serwerze?

Próbowałem serwować plik na serwerze ekspresowym, ale dostaję ten błąd w przeglądarce (ta sama trasa działa dobrze z webpack-dev-server).
http://localhost:3000/app
Can not Get/app

mam prostą drogę takiego. Strona docelowa w/działa poprawnie, ale nie mam dostępu do trasy aplikacji

var Routes =() => (
    <Router history={browserHistory}> 
     <Route path="/" component={Landing}> 
     </Route> 
     <Route path="/app" component={App}> 
     </Route> 
    </Router> 
) 

Oto mój plik server.js. Włożyłem bundle.js, index.html w ./public

app.use(express.static('./public')); 
app.listen(port, function() { 
    console.log('Server running on port ' + port); 
}); 

Odpowiedz

12

Trzeba ogłosić „catch all” trasy ekspresowej na serwerze, który przechwytuje wszystkie żądania strony i kieruje je do klienta. Po pierwsze, upewnij się, że w tym module path na serwerze:

var path = require('path'); 

Następnie umieścić to przed app.listen:

app.get('*', function(req, res) { 
    res.sendFile(path.resolve(__dirname, 'public/index.html')); 
}); 

Zakłada jesteś włożeniu bundle.js do index.html za pomocą tagu skrypt.

+0

Dzięki, działa idealnie! Znaleziono jedną pomniejszą literówkę w twoim rozwiązaniu: Powinno to być res.sendFile (path.resolve (__ dirname', ''public/index.html')); –

+0

Świetnie! Dziękuję również za to, że to zauważyłem, zredagowałem odpowiedź. –

+0

, ale co, jeśli mój pakiet wyjściowy do "./dist/bundle.js", a mój kod uwolniony i index.html są w "./public"? co muszę zrobić w prod? mój ekspresowy serwer udostępnia pliki statyczne z "public" ... ale skrypt referencyjny index.html do "dist/bundle.js" - CAN NOT REACH IT .... (to działa dobrze z serwerem dewelopera webpacka) –

Powiązane problemy