news 2026/9/10 10:55:16

React Router 生产构建后如何用 @react-router/serve 启动服务并配置 HOST 与 PORT?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
React Router 生产构建后如何用 @react-router/serve 启动服务并配置 HOST 与 PORT?

React Router 生产构建后如何用 @react-router/serve 启动服务并配置 HOST 与 PORT?

【免费下载链接】react-routerDeclarative routing for React项目地址: https://gitcode.com/GitHub_Trending/re/react-router

完成react-router build之后,你需要一个 Node.js 服务器来托管构建产物。React Router 官方提供了@react-router/serve包(可执行命令为react-router-serve),它是一个基于 Express 的、开箱即用的生产服务器:默认挂载了compressionexpress.static(含serve-static)和morgan中间件,不需要你手写服务器代码。本文介绍如何在生产构建后用react-router-serve启动应用,并通过HOSTPORT环境变量控制监听地址和端口。

前提条件

  • 一个 Framework mode 的 React Router 项目(例如通过npx create-react-router@latest生成的模板,或按 Quick Start 手动搭建的项目),项目根目录已安装依赖。
  • 生产运行需要以下运行时依赖,Quick Start 给出的完整安装命令为:
npm i react-router @react-router/node @react-router/serve isbot react react-dom npm i -D @react-router/dev vite

其中@react-router/serve是本文要用的生产服务器包,@react-router/dev(提供react-router build命令)应放在devDependencies,不要部署到服务器。

第一步:执行生产构建

在项目根目录运行:

npx react-router build

该命令通过 Vite 构建生产产物,构建时会将process.env.NODE_ENV设为production并对输出做压缩。构建完成后会生成build目录,其中包含:

  • server/:服务端版本的构建产物(server build,即一个可以在 Node.js 服务器里运行的模块);
  • client/:浏览器端静态资源。

构建输出位置由 react-router.config.ts 控制:buildDirectory默认"build"serverBuildFile默认"index.js",因此默认的服务端入口文件是build/server/index.js。如果你改过这两个配置项,后一步要传入的实际路径会相应变化。

第二步:用 react-router-serve 启动服务

react-router-serve接受一个参数:server build 的路径(serverBuildPath)。命令文档见 @react-router/serve:

react-router-serve <server-build-path> # 例如 react-router-serve build/server/index.js

默认配置下使用 Quick Start 中的写法即可:

npx react-router-serve build/server/index.js

启动后,服务默认运行在 3000 端口。可以在浏览器打开http://localhost:3000验证——Quick Start 中的预期结果是看到 "hello world" 页面(以你项目实际渲染的内容为准)。react-router-serve的 CLI 源码 中,监听成功时会向控制台打印形如[react-router-serve] http://localhost:3000的地址日志,可作为服务已启动的判断依据。

第三步:用 HOST 环境变量配置监听主机名

HOST的值会传递给 Express 内部app.listen方法,用于指定服务绑定的主机名/地址:

HOST=127.0.0.1 npx react-router-serve build/server/index.js

不设置HOST时,服务监听所有可用地址,此时启动日志会额外打印本机局域网 IP 对应的地址(如[react-router-serve] http://localhost:3000 (http://192.168.x.x:3000));设置HOST后服务只绑定你指定的地址。

第四步:用 PORT 环境变量修改端口

端口同样通过环境变量指定:

PORT=4000 npx react-router-serve build/index.js

未设置PORT时,react-router-serve会优先尝试 3000 端口;若 3000 不可用(被占用或无权限),它会自动改用一个可用端口。HOSTPORT可以组合使用:

HOST=127.0.0.1 PORT=4000 npx react-router-serve build/server/index.js

模板项目通常把这个启动方式写进package.jsonstart脚本,仓库中的 playground 项目即为:

"start": "react-router-serve ./build/server/index.js"

验证与注意事项

验证方式

  1. 看启动日志:react-router-serve监听成功后打印[react-router-serve] http://localhost:<port>(文档示例中端口为 3000)。
  2. 浏览器或 HTTP 客户端访问该地址,确认返回你应用的页面。

需要注意的边界

  • 生产/开发模式由NODE_ENV决定。根据process.env.NODE_ENV,服务器以开发模式或生产模式启动。在开发模式下,@react-router/serve会为每个请求清空require缓存以确保运行最新代码,这会导致模块作用域的值(如模块级缓存)在每个请求间被重置;生产模式下服务器启动一次即固定,不会发生该行为。如果服务器代码依赖模块级缓存,文档建议改用自定义@react-router/express服务器配合pm2-devnodemon之类的热重载工具。
  • server-build-path必须指向真实的构建产物。生产环境只部署构建产物(build/public/build/),react-router.config.ts本身不保证在生产环境可用,所以必须通过命令行参数显式告诉 React Router server build 在哪里。
  • @react-router/serve不提供任何定制选项。这是有意为之:如果需要定制底层 Express 服务器(比如加中间件、改请求处理逻辑),文档给出的路径是迁移到@react-router/expressadapter 完全自建服务器,参见 adapter 文档中的 "Migrating from the React Router App Server" 章节。对于不需要定制的场景,react-router-serve+HOST/PORT就足够覆盖启动需求。

build/server目录本身只是一个模块,也可以不经过react-router-serve直接放进 Express 等任意服务器中运行(Quick Start 的 "Bring Your Own Server" 一节有完整示例)。但就"构建后直接启动生产服务"这个任务而言,react-router-serve加上HOSTPORT两个环境变量就是文档给出的最短路径。

【免费下载链接】react-routerDeclarative routing for React项目地址: https://gitcode.com/GitHub_Trending/re/react-router

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/10 10:53:40

STM32F103四路独立PWM硬件配置与同步控制实战

简介&#xff1a;本资源是一套基于STM32F10x系列的四路PWM输出完整工程实现&#xff0c;面向嵌入式初学者与电机控制开发者&#xff0c;解决多路独立PWM信号生成、频率与占空比精准调控等核心问题&#xff0c;适用于直流电机双路驱动、LED调光、电源控制等典型应用场景。压缩包…

作者头像 李华
网站建设 2026/9/10 10:53:29

化工反应釜PLC控制系统设计与组态王应用实践

1. 项目背景与核心需求解析 化工生产中的加热反应釜控制一直是工业自动化领域的经典课题。去年我在某中型化工厂参与改造的老式反应釜控制系统&#xff0c;正是采用三菱FX2N系列PLC作为主控制器。这个40kW的夹套式反应釜&#xff0c;需要精确控制反应物温度在1℃范围内&#xf…

作者头像 李华
网站建设 2026/9/10 10:53:06

Django+dlib构建本地化人脸签到系统

简介&#xff1a;本资源是一套完整的毕业设计级Web人脸识别签到系统实现方案&#xff0c;面向计算机专业本科生、研究生及Web开发初学者&#xff0c;解决传统人工考勤效率低、易代签等问题&#xff0c;适用于高校课堂管理、企业会议签到等实际场景。压缩包为ZIP格式&#xff0c…

作者头像 李华
网站建设 2026/9/10 10:52:50

ECC前端工程化工具:TypeScript定义+Python执行的CLI优先脚手架

1. 项目概述&#xff1a;ECC不是“SAP年结”也不是“内存报错”&#xff0c;它是一套可落地的现代前端工程化工具链 ECC——这个在搜索热词里和“SAP年结”“uncorr. ecc 显示2”混在一起的缩写&#xff0c;正在被越来越多前端团队悄悄用作内部工程化代号。它既不是内存纠错码&…

作者头像 李华
网站建设 2026/9/10 10:52:36

GFPGAN工程实战:人脸修复与超分推理全流程解析

简介&#xff1a;GFPGAN 旧照片修复算法的完整工程包&#xff0c;面向对人工智能图像修复感兴趣的开发者、研究者及有老照片还原需求的用户。工程基于 VS2019 构建&#xff0c;已集成必要的依赖与模型权重&#xff0c;下载解压后即可打开运行&#xff0c;省去繁琐的环境配置。压…

作者头像 李华