手册

构建报错怎么修

这些是构建失败时 React2Static 能自己认出来的原因。下面每一条贴的都是 npm、Vite 或 tsc 实际打出来的原文,你可以直接拿手上那行去搜——也可以把项目传进工作台,它会告诉你撞上的是哪一条。

下面示例里的包名、路径和数值都只是举例,工作台填进去的是你自己项目里的那个。

找不到模块 react-router-dom

你看到的是

error during build:
[vite]: Rollup failed to resolve import "react-router-dom" from "/home/project/src/App.tsx".
This is most likely unintended because it can break your application at runtime.

代码里 import 了 react-router-dom,但 package.json 里没有它,所以从来就没装上。把它加进 dependencies,或者删掉那行 import。这是 AI 生成的项目里最常见的失败:写代码那台机器上早就装过,所以本地能跑。

改成

npm install react-router-dom

package.json 里没有 build 脚本

你看到的是

npm error Missing script: "build"
npm error
npm error To see a list of scripts, run:
npm error   npm run

我们执行的是 npm run build,而这个项目没有 build 脚本可跑。补一条即可——Vite 项目就是 "build": "vite build"。

改成

{
  "scripts": {
    "build": "vite build"
  }
}

TypeScript 类型检查没通过

你看到的是

src/components/PostCard.tsx:12:23 - error TS2339: Property 'title' does not exist on type 'Post'.

12   <h2>{post.title}</h2>
                 ~~~~~

构建脚本在打包前先跑了 tsc,类型检查失败了。改掉日志里指出的那个文件,或者把构建脚本改成只打包——把 "tsc && vite build" 换成 "vite build"。

改成

{
  "scripts": {
    "build": "vite build"
  }
}

vite 没有安装

你看到的是

> my-app@0.0.0 build
> vite build

sh: 1: vite: not found

构建脚本调用了 vite,但 package.json 里没有它,所以它从来没被装上。把它加进 devDependencies。

改成

npm install -D vite

依赖版本互相打架

你看到的是

npm error code ERESOLVE
npm error ERESOLVE unable to resolve dependency tree
npm error
npm error While resolving: my-app@0.0.0
npm error Found: react@19.0.0

两个包要求同一个依赖的不同版本,装不到一起。我们已经自动用 --legacy-peer-deps 重试过一次,还是失败,需要手动把 package.json 里冲突的版本号对齐。

包 @shadcn/ui-toast 不存在

你看到的是

npm error code E404
npm error 404 Not Found - GET https://registry.npmjs.org/@shadcn%2fui-toast
npm error 404 '@shadcn/ui-toast@^1.0.0' is not in this registry.

npm 在 registry 里找不到它。AI 有时候会编出不存在的包名,私有包在这里也访问不到。检查 package.json 里的拼写,或者如果没人 import 它,直接删掉这条依赖。

react@^19.9.0 没有匹配的版本

你看到的是

npm error code ETARGET
npm error notarget No matching version found for react@^19.9.0.

包本身是有的,但你写的这个版本范围没有发布过。把 package.json 里的版本号放宽,或者改成一个确实发布过的版本。

构建完了但没有产物目录

你看到的是

vite v5.4.10 building for production...
✓ 41 modules transformed.
✓ built in 1.24s

构建过程本身没报错,但没有东西可收。我们会去 dist/、build/、out/ 三个地方找——确认一下你的构建配置输出到哪个目录。

Next.js 没有生成静态文件

你看到的是

▲ Next.js 14.2.5

✓ Compiled successfully
✓ Generating static pages (5/5)

Route (app)                    Size     First Load JS

next build 默认产出的是跑在服务器上的应用,放在 .next/ 里。在 next.config.js 加上 output: "export" 再构建一次,产物会写到 out/,我们就能收到了。注意 API 路由、server actions、图片优化这些服务端能力导出后不再可用。

改成

// next.config.js
module.exports = {
  output: 'export',
}

构建把内存跑爆了

你看到的是

<--- Last few GCs --->

FATAL ERROR: Reached heap limit Allocation failed - JavaScript heap out of memory

浏览器里的构建只有有限的内存,这个项目超了。删掉用不上的依赖和过大的素材通常能压回来;实在不行,这个项目只能在你自己电脑上构建。

这看起来是 monorepo 里的一个包

你看到的是

npm error code EUNSUPPORTEDPROTOCOL
npm error Unsupported URL Type "workspace:": workspace:*

package.json 里用了 workspace: 依赖,这种写法只有在完整仓库里才解析得了。请只上传这个应用本身,并把 workspace: 换成真实的版本号。

项目要求的 Node 版本对不上

你看到的是

npm warn EBADENGINE Unsupported engine {
npm warn EBADENGINE   package: 'some-package@3.0.0',
npm warn EBADENGINE   required: { node: '>=22.0.0' },
npm warn EBADENGINE   current: { node: 'v20.11.1' }
npm warn EBADENGINE }

某个依赖声明了这个环境提供不了的 Node 版本。放宽 engines 字段,或者换一个支持当前 Node 的版本。

连不上 npm 服务器

你看到的是

npm error code EAI_AGAIN
npm error network request to https://registry.npmjs.org/react failed, reason: getaddrinfo EAI_AGAIN registry.npmjs.org

下载中途断了。这种情况一般是临时的,重试一次就好。在 registry.npmjs.org 被墙的地区需要挂代理。

让它替你找

把 ZIP 拖进工作台。构建会在你自己的浏览器里真跑一遍,出问题时它指出关键的那一行,而不是把整篇日志甩给你。

打开构建台

相关

静态站上线前该检查什么React2Static 在部署前会对产物做的 15 项检查:暴露的密钥、连不上的接口、缺失的 meta 标签,以及每一项怎么修。