2016-03-10 38 views
14

Ho un'app con percorsi semplici. Funziona bene quando utilizzo il server di sviluppo webpack. Ora, voglio distribuirlo sul mio server di produzione. Così ho costruito bundle.js. Tuttavia, non sono sicuro di quale sia il modo corretto di servire il file sul server.Qual è il modo corretto di servire la produzione reacle.js compilato da webpack?

La maggior parte dei post del blog fermano a bundle.js costruzione o distribuirlo agli Heroku o nodejutsu. Cosa devo fare se voglio servirlo sul mio server?

ho cercato di servire il file sul Server Express, ma sto ottenendo questo errore nel browser (questo stesso percorso funziona bene con webpack-dev-server).
http://localhost:3000/app
non possono ottenere/app

ho percorso semplice come questo. pagina di destinazione a/funziona bene, ma non posso accedere a/percorso app

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

ecco la mia server.js. Ho messo bundle.js, index.html nel ./public

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

risposta

12

È necessario dichiarare un percorso di "catch all" sul Server Express che cattura tutte le richieste di pagina e li indirizza al client. In primo luogo, assicurarsi che si sta compreso il modulo path sul server:

var path = require('path'); 

Poi, mettere questo prima app.listen:

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

Questo presuppone che si sta inserendo in bundle.jsindex.html tramite un tag script.

+0

Grazie, funziona perfettamente! Trovato un errore di battitura minore nella soluzione: Dovrebbe essere res.sendFile (path.resolve (__ dirname', ' 'pubblico/index.html')); –

+0

Ottimo! Grazie anche per aver notato che ho modificato la risposta. –

+0

ma cosa succede se la mia uscita webpack a './dist/bundle.js', mentre il mio codice disaggregato e index.html sono in' ./public'? cosa devo fare in prod? mio Server Express servire i file statici dal 'pubblico' .. ma lo script di riferimento index.html a 'dist/bundle.js' - non può raggiungere IT .... (questo è funziona bene con il server dev di webpack) –