React SSR,如何利用webpack编译获得react注水js文件?
发布于 作者:苏南大叔 来源:程序如此灵动~

到目前为止,React SSR
的代码使用姿势问题,已经讲的很明确了,应该可以应付绝大多数使用场景了。本文的内容把目光集中在“注水函数hydrateRoot()
所在的.js
文件”上。在目前的一系列react
相关文章中,一直基于create-react-app
的cra
模版进行修改的,本文中所描述的代码,依然是基于这个cra
模版的不断魔改版本。

苏南大叔的“程序如此灵动”博客,记录苏南大叔的编程心得体会。本文测试环境:nodejs@20.18.0
,create-react-app@5.0.1
,react-router-dom@6.27.0
,react@18.3.1
。本文所叙述的内容,其实和SSR
关联并不大。更多的关乎的是React
程序的编译和运行。
区分目的性
实际上,对于普通的React
程序渲染createRoot()
,还是以注水为目的的hydrateRoot()
。仅仅有一小部分代码不一致。那么,体现在index.js
文件里面,代码参考:
普通版:
关键函数 | 目的性 |
---|---|
createRoot() | react普通渲染 |
hydrateRoot() | react注水 |
注水版:

npm run build(create-react-app)
正常来说,react
项目里面那么多的自定义的文件,以及node_modules
里面的关联代码。因为使用了目前尚未被支持的语法,所以,需要使用babel
进行编译成目前能理解的代码,然后合并处理成一个.js
文件。
对于create-react-app
构建的项目来说,把createRoot()
替换成hydrateRoot()
之后,执行npm run build
命令。就可以在build/static/js/
文件夹里面获得目标js
文件了。改成需要的名字,放在合适的位置就行了。
实际执行的命令是:

webpack + babelrc(自搭建环境)
如果不是标准的create-react-app
项目,也可以利用webpack
和babel
生成目标js
文件。参考文章:
- 自己搭建
webpack
+react
环境:https://newsn.net/say/webpack-react-diy.html
.babelrc
文件如下:
webpack.config.js
:
webpack.config.prod.js
:

src/ssr.jsx
:
执行命令
package.json
,新增两条命令:
执行命令:

有关cross-env
命令的安装和使用,可以参考文章:
webpack
也可以根据需要开启watch
参数,参考文章:
development 和 production
从上面的构建结果,可以看到:development
的构建结果,文件是比较巨大的(高达1.5M左右)。而production
的结果,则是比较的小巧,一百多K。所以,哪个文件适合于部署,是一目了然的。
NODE_ENV | mode | sourcemap | 文件 |
---|---|---|---|
无 | production | 开启 | main.9447f8ca.js(199kb) |
development | development | 开启 | ssr.js(1.5M) |
production | production | 关闭 | ssr.prod.js(197kb) |
顺便提一句,webpack.config.js
里面的mode:production
,也可以转移到webpack
命令里面去。例如:
结语
更多react
经典经验文章,请参考苏南大叔的博客:


