prerender_html 并非标准 api,而是私有封装函数,常见于自定义构建脚本或中间件;真实预渲染应依赖 next.js、nuxt 等框架的原生配置或 puppeteer/prerender-node 等工具链。

预渲染不是万能的,prerender_html 这个函数名并不存在于标准 HTML 或主流框架中——它通常是某类自定义构建脚本、中间件或私有工具链里的命名,比如 Next.js 的 getStaticProps + getStaticPaths、Nuxt 的 generate 模式,或是 Express 中配合 prerender-node 中间件时手写的 prerender 调用。直接搜这个函数名,大概率找不到文档,因为它是被封装/重命名过的。
为什么 prerender_html 找不到官方定义
这是最常见的认知偏差:把业务层封装当成了标准 API。真实世界里:
-
prerender_html很可能是团队内部封装的一个 Node.js 函数,用来调用 Puppeteer 或 Headless Chrome 渲染 Vue/React 页面后吐出静态 HTML 字符串 - 也可能是某个 CMS 插件导出的钩子函数名,参数和行为完全由该插件约定
- 在 Next.js 13+ App Router 中,根本没有
prerender_html的位置——预渲染逻辑由generateStaticParams和dynamic = "error"等配置驱动 - 搜索报错
ReferenceError: prerender_html is not defined?那说明你漏掉了 require/import,或者它根本没被挂到全局/上下文里
真正起作用的是 prerender-node 或 Puppeteer 启动方式
如果你在 Express 或 Koa 项目里看到 “prerender” 相关逻辑,90% 是基于 prerender-node(已归档)或自己用 puppeteer 实现的中间件。关键不是函数名,而是启动时机和渲染上下文:
-
prerender-node会监听请求路径,匹配prerender.io的 UA 规则(如包含_escaped_fragment_),再转发给内置 Chrome 实例 - 自己用
puppeteer.launch()做预渲染,必须手动控制page.goto()、page.content()、超时和关闭,否则内存泄漏极快 - 不要在生产环境每次请求都 launch 新浏览器;应复用
browser实例,或改用puppeteer-core+ 已运行的 Chrome 进程 - Vue/React 应用需确保 hydration 能正确接管——即服务端吐出的 HTML 必须与客户端首屏 DOM 结构一致,否则 React 会丢弃整个节点并重 render
Next.js/Nuxt 用户别写 prerender_html,改配 output: "export"
现代框架早已把预渲染下沉为构建配置,硬写函数反而绕过优化机制:
- Next.js 13+ App Router:设
export const dynamic = "error"+generateStaticParams,运行next build && next export即生成纯静态out/目录 - Nuxt 3:在
nuxt.config.ts中启用ssr: false并执行nuxt generate,所有路由默认静态化,无需手写渲染函数 - Vite + Vue/React:用
vite-plugin-ssr替代自研方案,它的prerender钩子才是标准入口,不是prerender_html - 注意
getServerSideProps会禁用静态导出;想预渲染就必须剔除所有 runtime 数据获取逻辑,或提前在构建时 resolve
最常被忽略的一点:预渲染的内容是否带时效性?比如用户登录态、实时价格、未读数——这些不能塞进静态 HTML,得留空占位或用 JS 懒加载补全。否则缓存一刷新,全站显示昨天的数据。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











