2016-03-10 18 views
14

Tôi có một ứng dụng với các tuyến đơn giản. Nó hoạt động tốt khi tôi sử dụng máy chủ phát triển webpack. Bây giờ, tôi muốn triển khai nó vào máy chủ sản xuất của mình. Vì vậy, tôi đã xây dựng bundle.js. Tuy nhiên, tôi không chắc chắn những gì là đúng cách để phục vụ các tập tin trên máy chủ.Cách chính xác để phục vụ sản xuất phản ứng bundle.js được xây dựng bởi webpack là gì?

Hầu hết các bài đăng trên blog đều dừng xây dựng bundle.js hoặc triển khai nó cho heroku hoặc nodejutsu. Tôi nên làm gì nếu tôi muốn phục vụ nó trên máy chủ của riêng tôi?

Tôi đã cố gắng phân phát tệp trên máy chủ tốc hành nhưng tôi gặp lỗi này trong trình duyệt (cùng một tuyến này hoạt động tốt với webpack-dev-server).
http://localhost:3000/app
Không thể nhận/ứng dụng

Tôi có tuyến đường đơn giản như thế này. Trang đích tại/hoạt động tốt, nhưng tôi không thể truy cập/tuyến đường ứng dụng

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

Đây là server.js của tôi. Tôi đặt bundle.js, index.html vào ./public

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

Trả lời

12

Bạn cần khai báo tất cả yêu cầu trang và chuyển hướng chúng đến khách hàng. Trước tiên, hãy chắc chắn rằng bạn đang bao gồm các module path trên máy chủ của bạn:

var path = require('path'); 

Sau đó, đặt này trước app.listen:

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

này giả định bạn đang chèn bundle.js vào index.html qua thẻ script.

+0

Cảm ơn, hoạt động hoàn hảo! Đã tìm thấy một lỗi chính nhỏ trong giải pháp của bạn: Nó phải là res.sendFile (path.resolve (__ dirname', ''public/index.html')); –

+0

Tuyệt vời! Ngoài ra cảm ơn bạn đã nhận thấy rằng, tôi đã chỉnh sửa câu trả lời. –

+0

nhưng nếu webpack của tôi xuất ra './dist/bundle.js', trong khi mã chưa được phân tích và index.html của tôi nằm trong './public' thì sao? những gì tôi cần làm trong sản xuất? máy chủ tốc hành của tôi phục vụ các tệp tĩnh từ 'công khai' .. nhưng chỉ mục index.html tham chiếu đến 'dist/bundle.js' - KHÔNG THỂ TRUY CẬP CNTT .... (điều này hoạt động tốt với máy chủ dev của webpack) –

Các vấn đề liên quan