首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在不大量修改现有应用程序的情况下在服务器上呈现react组件?

如何在不大量修改现有应用程序的情况下在服务器上呈现react组件?
EN

Stack Overflow用户
提问于 2016-05-04 02:02:16
回答 2查看 324关注 0票数 3

我的server.js文件是在节点中编写的,如下所示:

代码语言:javascript
运行
复制
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看起来像这样:

代码语言:javascript
运行
复制
<!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路由器代码,如下所示:

代码语言:javascript
运行
复制
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个不同的库在服务器上渲染的例子?

EN

回答 2

Stack Overflow用户

发布于 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

票数 1
EN

Stack Overflow用户

发布于 2016-05-10 13:02:55

我正在寻找类似的东西,发现这个博客很有用。您也应该尝试遵循它,它将很容易设置,并开始使用。Server side rendering with react, node & express

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37011248

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档