我的server.js文件是在节点中编写的,如下所示:
var path = require('path');
var express = require('express');
var app = express();
var PORT = process.env.PORT || 8080
// using webpack-dev-server and middleware in development environment
if(process.env.NODE_ENV !== 'production') {
  var webpackDevMiddleware = require('webpack-dev-middleware');
  var webpackHotMiddleware = require('webpack-hot-middleware');
  var webpack = require('webpack');
  var config = require('./webpack.config');
  var compiler = webpack(config);
  app.use(webpackDevMiddleware(compiler, { noInfo: true, publicPath: config.output.publicPath }));
  app.use(webpackHotMiddleware(compiler));
}
app.use(express.static(path.join(__dirname, 'dist')));
app.get('*', function(request, response) {
  response.sendFile(__dirname + '/dist/index.html')
});
app.listen(PORT, function(error) {
  if (error) {
    console.error(error);
  } else {
    console.info("Listening on port %s", PORT);
  }
});我的index.html看起来像这样:
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>what ever</title>
    <link href="https://fonts.googleapis.com/css?family=Roboto:400,100,100italic,300,300italic,400italic,500,500italic,700,700italic,900,900italic" rel="stylesheet" type="text/css">
        <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.6/css/bootstrap.min.css" media="screen" title="no title" charset="utf-8">
  </head>
  <body>
    <div id='root'/>
  </body>
  <script src="/bundle.js"></script>
</html>我的index.js文件包含react路由器代码,如下所示:
import React from 'react';
import { render } from 'react-dom';
import { Router, Route, browserHistory, hashHistory } from 'react-router';
/*----------- STYLESHEETS -----------*/
require('./assets/stylesheets/base.scss');
let history = process.env.NODE_ENV === "production" ? browserHistory : hashHistory;
/*----------- ROUTE COMPONENTS -----------*/
import Home from './components/home';
import Company from './components/company';
import Features from './components/features';
import Help from './components/help';
import SignUp from './components/signup';
import Work from './components/work';
render((
  <Router history={history}>
    {/** ###### HOME ROUTE ###### */}
    <Route path="/" component={Home} />
    <Route path="/company" component={Company} />
    <Route path="/help" component={Help} />
    <Route path="/features" component={Features} />
    <Route path="/signup" component={SignUp} />
    <Route path="/work" component={Work} />
    {/** ###### END HOME ROUTES ###### */}
  </Router>
), document.getElementById('root'));我正在使用webpack来构建和包含像sass和图像这样的资产。我可以使用this教程通过服务器渲染单个页面,但它看起来没有css和图像,而且它似乎以一种不太好的方式完全改变了应用程序的流程。有没有轻量级的简单应用程序不使用800000个不同的库在服务器上渲染的例子?
发布于 2016-05-10 17:30:56
主要的问题是Node不知道如何处理需要你的非js / json资产。
Webpack支持的一种开箱即用的解决方案是使用target: 'node'和output.libraryTarget: commonjs2,这将在Node中生成一个可供required使用的包。
您还需要查看ExtractTextPlugin以将CSS解压缩到一个单独的文件中,否则,在下载JS之前,html将呈现为无样式。
使用React Router会有点复杂,但这里有一些很好的文档-- https://github.com/reactjs/react-router/blob/master/docs/guides/ServerRendering.md
https://stackoverflow.com/questions/37011248
复制相似问题