这个是针对小白入门的文章,大神请绕过。
本文首发: http://shudong.wang/article/101
一套代码既能够在服务端运行又能够在客户端运行,这就是同构应用。简而言之, 就是服务端直出和客户端渲染的组合, 可以充分结合二者的优点,并有效避免二者的不足。html
归纳地说,同构就是服务端(Node)替客户端请求接口,获取到数据后,将有数据和结构的页面渲染好以后返回给客户端,这样避免了客户端页面首次渲染,同时服务端RPC比客户端请求要快。vue
能够看看这个文章 https://www.zhihu.com/questio...node
性能: 下降首屏渲染时间
SEO: seo友好react
若是搜索引擎蜘蛛来到你的网站,网站返回的的内容几乎没有,这就不太友好了,它就无功而返,相对你的网站就很难被搜索引擎收入。
通常配合后端框架 如: koa express 用什么本身选择
若是你想体验 ssr 渲染,最好理解请看这个分支
分支 simple-ssr
demo 地址webpack
这个demo 采用的express react webpack 最基础的同构,后续会慢慢增长功能
每一个功能尽可能在一个分支,方便你们查看
react 有个成熟的解决方案 next ,通常这种方案,不适合迁移,灵活度不高 和 vue 的ssr nuxt 相似
这个配置主要把文件打包git
const path = require('path') module.exports = { target: "node", entry: { app: path.join(__dirname, '主要程序入口文件') //server-entry.js }, output: { filename: 'server-entry.js', path: path.join(__dirname, '../dist'), publicPath: '/public', libraryTarget: 'commonjs2' }, module: { rules: [ { test: /.jsx$/, loader: 'babel-loader' }, { test: /.js$/, loader: 'babel-loader', exclude: [ path.join(__dirname, '../node_modules') ] } ] } }
这个主要把react 导出
import React from 'react' import App from './App.js' export default <App />
当咱们访问url 的时候,让express去接管github
app.get('*', function (req, res) { const reactTpl = ReactSSR.renderToString(serverEntry) res.send(template.replace('<!-- stark -->', reactTpl)) })
const express = require('express') const ReactSSR = require('react-dom/server') const fs = require('fs') const path = require('path') const app = express() const serverEntry = require('../dist/server-entry').default // 里面读取的是编译后的文件 const template = fs.readFileSync(path.join(__dirname, '../dist/index.html'), 'utf8') // 设置public加在的静态目录 app.use('/public', express.static(path.join(__dirname, '../dist'))) app.get('*', function (req, res) { const reactTpl = ReactSSR.renderToString(serverEntry) res.send(template.replace('<!-- stark -->', reactTpl)) }) app.listen(3006, function () { console.log('====================================') console.log('open url view website') console.log('====================================') console.log("http://localhost:3006") })
[*] 本地开发服务端重构
[*] 本地开发热更新同步到服务端渲染
[*] 项目目录架构web