webpack-react-javascript
2023年02月24日
一、基础渲染
ReactSSR
基础渲染的过程:
- 服务端通过
react-dom/server
中的renderToString()
API 将react
组件生成字符串 - 服务端将生成的字符串拼接到
html
模板中一并发送到前端
具体实现过程如下所示:
1.1 目录结构
|- build // 用于存放打包文件
|- config
| |- webpack.config.js //用于配置 webpack
|- public // 用于存放静态资源 比如 favicon.ico
|- src
| |- assets // 用于存放项目中的静态资源
| |- lib // 用于存放一些处理函数
| |- pages // 项目页面
| |- server // 项目服务端
| |- utils // 项目工具函数
|- babel.config.js //用于配置 Babel
1.2 所需依赖
-
Babel 所需依赖
yarn add core-js babel-loader @babel/core @babel/preset-env @babel/preset-react @babel/plugin-transform-runtime -D
-
Webpack 所需依赖
yarn add webpack webpack-cli clean-webpack-plugin -D
-
Koa 服务所需依赖
yarn add koa koa-router koa-static -S
-
命令行 所需依赖
yarn add nodemon npm-run-all -S
-
React 所需依赖
yarn add react react-dom -S
1.3 构建服务
-
根目录新建
src
-
src
下创建lib
-
lib
下创建ssr.js
import React from 'react';
import App from "../pages/App";
import ReactDOMServer from "react-dom/server";
export const render = () => {
const content = ReactDOMServer.renderToString(<App />);
return content;
};
export const buildHtmlString = (content) => {
const htmlString = `<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>基于Webpack的React服务端渲染</title>
</head>
<body>
${content}
</body>
</html>`;
return htmlString;
}; -
src
下创建utils
-
utils
下创建path.js
import Path from 'path';
export const rootPath=process.cwd();
export const relativeToRoot=(path)=>{
return Path.resolve(process.cwd(),path);
}