博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Universal-webpack服务端渲染
阅读量:5882 次
发布时间:2019-06-19

本文共 3618 字,大约阅读时间需要 12 分钟。

Universal-webpack

帮助搭建用于同构,即同时可以在客户端和服务端使用的Webpack。

Demo

:universal-webpack + koa + react + webpack。

Webpack 2

目前仅支持Webpack2.

npm install webpack --savenpm install extract-text-webpack-plugin --save

使用

以往我们会创建一个标准的 webpack.config.js 。

此时,我们需要创建另外两个配置文件:webpack.config.client.babel.js 和 webpack.config.client.babel.js。如下:

webpack.config.client.babel.js

import { client } from 'universal-webpack/config'import settings from './universal-webpack-settings'import configuration from './webpack.config'export default client(configuration, settings)

代替webpack.config.js来完成客户端的打包。

webpack.config.server.babel.js

import { server } from 'universal-webpack/config'import settings from './universal-webpack-settings'import configuration from './webpack.config'export default server(configuration, settings)

universal-webpack-settings.json

{    "server":    {        "input": "./source/server.js",        "output": "./build/server/server.js"    }}

output所对应的文件由input对应的文件使用Webpack根据webpack.config.server.babel.js中的配置生成。

server.js

服务器启动,官方Demo如下:

// express.jsimport path from 'path'import http from 'http'import express from 'express'import http_proxy from 'http-proxy'// react-routerimport routes from '../client/routes.js'// Reduximport store from '../client/store.js'// The server code must export a function// (`parameters` may contain some miscellaneous library-specific stuff)export default function(parameters){    // Create HTTP server    const app = new express()    const server = new http.Server(app)    // Serve static files    app.use(express.static(path.join(__dirname, '..', 'build/assets')))    // Proxy API calls to API server    const proxy = http_proxy.createProxyServer({ target: 'http://localhost:xxxx' })    app.use('/api', (req, res) => proxy.web(req, res))    // React application rendering    app.use((req, res) =>    {        // Match current URL to the corresponding React page        // (can use `react-router`, `redux-router`, `react-router-redux`, etc)        react_router_match_url(routes, req.originalUrl).then((error, result) =>        {            if (error)            {                res.status(500)                return res.send('Server error')            }            // Render React page            const page = redux.provide(result, store)            res.status(200)            res.send('' + '\n' + ReactDOM.renderToString({page}))        })    })    // Start the HTTP server    server.listen()}

但这个文件不是真正的入口文件,需要另一个文件,我们需要另一个文件来启动服务。

start-server.js

var startServer = require('universal-webpack/server')var settings = require('../universal-webpack-settings')// `configuration.context` and `configuration.output.path` are usedvar configuration = require('../webpack.config')startServer(configuration, settings)

调用这个入口文件,实质上是调用了通过Webpack打包之后的server.js。

开发环境的启动命令大致如下:

webpack-dev-server --hot --inline --config "./webpack.config.client.babel.js" --port XXXX --colors --display-error-details//启动一个webpack-dev-server,真正的Development Server会从这里请求一些静态文件(比如:boundle.js)。//Universal-webpack不会再服务端释放任何资源,所有资源都在客户端)。webpack --watch --config "./webpack.config.server.babel.js" --colors --display-error-details//打包服务端代码nodemon "./source/start-server" --watch "./build/server"启动服务器

生产环境的启动命令大致如下:

webpack --config "./webpack.config.client.babel.js" --colors --display-error-detailswebpack --config "./webpack.config.server.babel.js" --colors --display-error-detailsnode "./source/start-server"

Chunks

返回webpack最终所输出的文件信息:

build/webpack-chunks.json

{    javascript:    {        main: `/assets/main.785f110e7775ec8322cf.js`    },    styles:    {        main: `/assets/main.785f110e7775ec8322cf.css`    }}

转载地址:http://yuvix.baihongyu.com/

你可能感兴趣的文章
C/C++ 多线程机制
查看>>
js - object.assign 以及浅、深拷贝
查看>>
python mysql Connect Pool mysql连接池 (201
查看>>
Boost在vs2010下的配置
查看>>
一起谈.NET技术,ASP.NET伪静态的实现及伪静态的意义
查看>>
20款绝佳的HTML5应用程序示例
查看>>
string::c_str()、string::c_data()及string与char *的正确转换
查看>>
11G数据的hive初测试
查看>>
如何使用Core Text计算一段文本绘制在屏幕上之后的高度
查看>>
==和equals区别
查看>>
2010技术应用计划
查看>>
XML 节点类型
查看>>
驯服 Tiger: 并发集合 超越 Map、Collection、List 和 Set
查看>>
Winform开发框架之权限管理系统改进的经验总结(3)-系统登录黑白名单的实现...
查看>>
LeetCode – LRU Cache (Java)
查看>>
JavaScript高级程序设计--对象,数组(栈方法,队列方法,重排序方法,迭代方法)...
查看>>
【转】 学习ios(必看经典)牛人40天精通iOS开发的学习方法【2015.12.2
查看>>
在 ASP.NET MVC 中使用异步控制器
查看>>
SQL语句的执行过程
查看>>
Silverlight开发历程—动画(线性动画)
查看>>