BetterLink Logo 比邻
切换语言
切换主题

Astro构建失败?5分钟排查这7个常见原因

Terminal screen showing Astro build errors and solutions

凌晨两点,盯着终端里满屏的红色报错,我又一次开始怀疑人生。本地开发明明好好的,npm run dev跑得飞快,组件渲染完美,路由也没问题。但一执行astro build,就炸了。

这种场景你肯定不陌生吧?Astro构建失败可能是前端开发者最头疼的问题之一。本地环境和生产构建的差异,让人摸不着头脑。更糟的是,错误信息往往长达几十行,充满了各种技术术语,根本不知道从哪里开始排查。

说实话,我刚开始用Astro的时候也是这样。每次遇到构建错误都要Google半天,试过各种解决方案,运气好的话十几分钟解决,运气不好可能折腾一整晚。后来我总结了一套系统的排查方法,发现其实90%的构建失败都逃不出这7个常见原因。

这篇文章就是我这两年踩坑经验的总结。我会带你搞懂:

  • 如何在5分钟内快速定位问题(不用再盲目尝试了)
  • 7种最常见的构建失败场景及其解决方案
  • 不同部署平台(Vercel/Cloudflare/GitHub Pages)的特殊坑点
  • 一些预防性的最佳实践,让你少踩坑

话不多说,先教你怎么快速诊断问题。

快速参考:错误信息速查表

先放个速查表,遇到错误可以快速对照:

错误信息可能原因快速解决
SyntaxError: Unexpected token 'with'Node.js版本太低升级到Node 18.17.1+或20.3.0+
Cannot find module / ERR_MODULE_NOT_FOUND依赖安装问题删除node_modules重新安装
frontmatter does not match schemaContent Collections验证失败检查Markdown文件的frontmatter格式
document is not defined / window is not defined第三方包不兼容SSR使用client:only或动态导入
The build was canceled集成冲突或依赖问题逐个注释集成排查
本地正常线上失败环境变量或Node版本差异检查部署平台配置
GitHub Pages页面404base路径未配置设置astro.config.mjs的base字段

一、快速诊断框架:5分钟定位问题

看懂错误信息的3个关键点

很多人一看到报错就慌了,其实错误信息里已经藏着答案。我教你3个关键点,快速解读错误:

1. 错误类型识别

看报错的第一行或关键词:

  • SyntaxError:代码语法问题
  • ModuleNotFoundErrorCannot find module:依赖找不到
  • ValidationError:数据验证失败(通常是Content Collections的frontmatter)
  • ENOENT:文件或目录不存在
  • is not defineddocument/window):服务端渲染时访问了浏览器API

举个例子,如果你看到SyntaxError: Unexpected token 'with',基本上可以确定是Node.js版本太低了。

2. 错误位置定位

往下翻找这些信息:

at /path/to/your/file.astro:23:5

这告诉你具体是哪个文件的第23行出了问题。别被中间的一堆node_modules路径干扰,找到你自己代码的路径才是关键。

有时候错误不在你的代码里,而是某个依赖包抛出的。这种情况下,看报错堆栈的最上面,通常会有Error: xxx caused by这样的线索。

3. 错误上下文理解

注意看错误是在哪个阶段出现的:

  • Building for production... → 构建阶段的错误
  • Rendering... → 页面渲染阶段的错误
  • vite v5.0.0 building for production... → Vite构建层的错误

构建阶段的错误通常是配置或依赖问题,渲染阶段的错误更多是代码逻辑问题。

5步快速排查法

好,现在你知道怎么看错误信息了。接下来按这5步操作,大部分问题都能定位:

Step 1: 检查Node.js版本

node -v

Astro要求Node.js 18.17.1+或20.3.0+。如果你的版本低于这个,升级就对了。我见过太多人卡在这一步,因为很多部署平台默认用的是旧版本Node。

如果本地用的是nvm,可以这样切换:

nvm use 20

Step 2: 检查依赖是否正确安装

npm list  # 或 pnpm list

看看有没有UNMET DEPENDENCYmissing这样的提示。如果有,说明依赖没装全。

另外,对比一下package.jsonpackage-lock.json的修改时间,如果lock文件比较旧,可能依赖已经不同步了。

Step 3: 清理缓存重新构建

这招简单粗暴但超有效。我每次遇到诡异的错误,第一反应就是清缓存:

# 删除所有构建产物和依赖
rm -rf node_modules .astro dist
# 重新安装
npm install
# 再试试构建
npm run build

你别说,至少30%的问题这样就解决了。缓存污染或依赖版本不一致真的很常见。

Step 4: 检查最近改动的文件

回想一下,上次构建成功后你改了什么?新加的组件?改了配置?装了新的依赖?

用git看看最近的改动:

git diff HEAD

很多时候问题就出在最近这一两次提交里。你可以试着先注释掉新改的代码,看看能不能构建成功,这样就能快速定位问题。

Step 5: 对比本地环境和CI环境的差异

如果本地构建成功,但CI/CD或部署平台失败,那就是环境差异的问题了。重点检查:

  • Node版本:本地和线上一致吗?
  • 包管理器:用的npm还是pnpm还是yarn?版本一致吗?
  • 环境变量:线上配置了所有需要的环境变量吗?
  • 依赖版本:lock文件提交了吗?线上安装的版本和本地一致吗?

我之前遇到过一次,本地用的Node 20,Vercel默认用的Node 18,结果用了一个只在Node 20支持的API,线上就报错了。后来在Vercel项目设置里指定了Node版本才解决。

二、7个最常见的构建失败原因

原因1:Node.js版本不兼容

典型错误信息

SyntaxError: Unexpected token 'with'

或者

error: Cannot use import statement outside a module

根本原因

Astro需要Node.js 18.17.1或更高版本(或者20.3.0+)。很多构建失败的根源就是版本太低。

为什么会出现这个问题呢?主要是这两种情况:

  1. 你本地升级过Node,但部署平台还在用旧版本
  2. 团队协作时,不同开发者的Node版本不一致

解决方案

本地环境

如果你用nvm管理Node版本,切换很简单:

nvm install 20
nvm use 20

部署平台配置

不同平台的配置方法不一样:

Vercel
在项目设置 → General → Node.js Version,选择20.x

Cloudflare Pages
在项目根目录创建.nvmrc文件:

20

Netlify
在根目录创建netlify.toml

[build.environment]
  NODE_VERSION = "20"

预防措施

package.json中加上这个,明确要求的Node版本:

{
  "engines": {
    "node": ">=18.17.1"
  }
}

这样如果有人用低版本Node,npm install的时候就会提示警告。

原因2:依赖包冲突或版本锁定问题

典型错误信息

Error: Cannot find module 'astro'
ERR_MODULE_NOT_FOUND

或者更诡异的:

X [ERROR] The build was canceled

常见场景

这类问题我遇到过好几次,通常是以下几种情况:

  1. 包管理器兼容性问题

Astro 4.11.2版本之后,对Bun和pnpm的支持有过调整,导致一些项目突然安装不上依赖。我当时就中招了,从4.11.1升级到4.11.2,pnpm突然报错,后来Astro团队修复了这个问题。

  1. lock文件和node_modules不同步

你可能改了package.json,但忘了更新lock文件,或者反过来,git拉了别人的lock文件但本地依赖没重装。

  1. 某些第三方包天生有问题

有些包在Astro环境下就是容易出错,比如:

  • astro-compress:很多人反馈这个包会导致构建失败
  • @supercharge/strings:有报过is not a function的错误
  • nodejs-mysql:最好换成mysql2,兼容性更好

解决方案

标准三板斧

# 1. 删除所有依赖和缓存
rm -rf node_modules .astro dist package-lock.json
# 或者如果用pnpm:
rm -rf node_modules .astro dist pnpm-lock.yaml

# 2. 清理包管理器缓存
npm cache clean --force
# 或 pnpm store prune

# 3. 重新安装
npm install
# 在CI环境用这个,确保依赖和lock文件一致:
npm ci

如果还不行,检查配置文件

pnpm用户可能需要调整.npmrc

shamefully-hoist=true
public-hoist-pattern[]=*astro*

最小化排查法

如果怀疑是某个依赖导致的,可以这样排查:

  1. 创建一个全新的Astro项目:
npm create astro@latest minimal-test -- --template minimal
  1. 把你的问题依赖加进去,看能不能复现

  2. 如果能复现,去GitHub Issues搜搜有没有人报过同样的问题

我之前就是用这个方法,发现是astro-compress的问题,最后换了其他图片优化方案。

原因3:Content Collections格式验证失败

典型错误信息

Error: blog → post.md frontmatter does not match collection schema.
"date" must be a valid date

或者:

MarkdownContentSchemaValidationError: Content entry frontmatter does not match schema
"title" is required

根本原因

Astro 2.0引入了Content Collections功能,用Zod来验证Markdown文件的frontmatter。这个功能很强大,能保证数据类型安全,但也带来了新问题——如果你的Markdown frontmatter格式不规范,构建时就会报错。

我刚开始用的时候也踩过坑。之前写的一些旧博客文章,frontmatter格式很随意,有的日期写成2024-01-01,有的写成2024/01/01,还有的直接省略了某些字段。结果一开启Content Collections,全部报错。

高频错误类型

  1. 必填字段缺失

Schema里定义了title是必填的,但某些Markdown文件没写title:

---
# 忘记写 title 了
date: 2024-01-01
---
  1. 字段类型错误

最常见的是日期格式问题:

---
title: "My Post"
date: 2024/01/01  # 应该是 2024-01-01
---

或者把数组写成了字符串:

---
tags: javascript  # 应该是 [javascript] 或 ["javascript"]
---
  1. 字段名拼写错误

Schema里定义的是description,你写成了desc,Astro就不认了。

解决方案

Step 1: 检查schema定义

打开src/content/config.ts,看看你的schema是怎么定义的:

import { z, defineCollection } from 'astro:content';

const blog = defineCollection({
  schema: z.object({
    title: z.string(),
    date: z.date(),
    tags: z.array(z.string()).optional(),
  }),
});

export const collections = { blog };

Step 2: 对照错误信息修改frontmatter

错误信息会告诉你哪个文件、哪个字段有问题。比如:

blog → my-post.md frontmatter does not match collection schema.
"date" must be a valid date

那就去修改src/content/blog/my-post.md的日期格式:

---
title: "我的文章"
date: 2024-01-01  # 确保格式是 YYYY-MM-DD
tags: ["astro", "blog"]
---

Step 3: 使用.passthrough()处理不规范的旧文章

如果你有很多历史文章,一个个改太麻烦了,可以用.passthrough()放宽验证:

const blog = defineCollection({
  schema: z.object({
    title: z.string(),
    date: z.coerce.date(),  // 使用 coerce 自动转换
    tags: z.array(z.string()).optional().default([]),
  }).passthrough(),  // 允许额外字段通过
});

.passthrough()的意思是:schema里没定义的字段也不报错,直接放行。

Step 4: 重启dev server

修改schema后,一定要重启dev server才能生效:

# 先停止 (Ctrl+C)
# 然后重新启动
npm run dev

或者在dev server运行时按s + enter同步内容层。

原因4:环境变量配置不当

典型场景

本地npm run devnpm run build都正常,但部署到Vercel/Cloudflare后:

  • 页面显示不全
  • 某些功能失效(比如评论系统、API调用)
  • 构建成功但运行时报错

常见问题

  1. 环境变量在部署平台没配置

你本地有.env文件,但.gitignore把它排除了(这是对的,不应该提交敏感信息)。问题是,部署平台不知道这些环境变量的值,所以构建或运行时就出问题了。

  1. PUBLIC_前缀使用不当

Astro对环境变量有个特殊规则:

  • 客户端可访问的变量必须以PUBLIC_开头
  • 服务端变量不需要前缀

如果你在客户端代码里用了没有PUBLIC_前缀的变量,构建时它会是undefined

举个例子:

// .env
API_KEY=abc123
PUBLIC_SITE_URL=https://example.com

// 客户端代码
const apiKey = import.meta.env.API_KEY;  // ❌ undefined
const siteUrl = import.meta.env.PUBLIC_SITE_URL;  // ✅ 正常

解决方案

各部署平台的配置方法

Vercel

  1. 进入项目 → Settings → Environment Variables
  2. 添加变量,选择适用的环境(Production/Preview/Development)
  3. 重新部署

Cloudflare Pages

  1. 项目 → Settings → Environment variables
  2. 分别为Production和Preview环境设置
  3. 触发重新构建

Netlify

  1. Site settings → Environment variables
  2. 添加变量
  3. 触发新的部署

正确使用环境变量

// astro.config.mjs
export default defineConfig({
  // 这里可以用任何环境变量
  site: import.meta.env.PUBLIC_SITE_URL,
});

// src/pages/index.astro
---
// 服务端代码,可以用任何变量
const apiKey = import.meta.env.API_KEY;
const response = await fetch(`https://api.example.com?key=${apiKey}`);
---

<script>
  // 客户端代码,只能用 PUBLIC_ 开头的变量
  const siteUrl = import.meta.env.PUBLIC_SITE_URL;
  console.log(siteUrl);  // 能正常打印

  const apiKey = import.meta.env.API_KEY;
  console.log(apiKey);  // undefined
</script>

安全提示

别把敏感信息(API密钥、数据库密码)放到PUBLIC_开头的变量里!这些值会被内联到打包后的JS文件,任何人都能看到。

如果你真的需要在客户端调用API,最好通过自己的后端接口中转,别直接暴露API密钥。

原因5:配置文件错误

典型错误信息

有时候没有明确的错误信息,就是构建卡住、无限循环、或者莫名其妙的Vite错误。

高频问题点

  1. base路径配置错误(GitHub Pages部署)

GitHub Pages的URL格式是https://username.github.io/repo-name/,如果你的astro.config.mjs没配置base,所有资源路径都会404。

错误配置:

export default defineConfig({
  site: 'https://username.github.io/my-blog/',
  // 忘了配置 base
});

正确配置:

export default defineConfig({
  site: 'https://username.github.io',
  base: '/my-blog',  // 仓库名作为base路径
});
  1. 集成(integrations)冲突

有人反馈过Svelte集成和content/config.ts有冲突,导致The build was canceled错误。

我遇到过的一次是同时用了多个图片优化插件,它们之间有冲突,去掉一个就好了。

解决方案

检查base路径

如果你要部署到子路径(比如GitHub Pages),确保配置了base:

// astro.config.mjs
export default defineConfig({
  site: 'https://yourdomain.com',
  base: process.env.BASE_PATH || '/',  // 本地开发用 /,部署时用实际路径
});

然后在CI配置里设置环境变量:

# .github/workflows/deploy.yml
env:
  BASE_PATH: /my-blog

排查集成冲突

如果怀疑是某个集成导致的,逐个注释掉测试:

// astro.config.mjs
export default defineConfig({
  integrations: [
    // react(),
    // tailwind(),
    // sitemap(),
  ],
});

从最简配置开始,然后一个个加回来,看哪个导致了问题。

原因6:第三方包不兼容SSG/SSR

典型错误信息

ReferenceError: document is not defined
ReferenceError: window is not defined

根本原因

Astro默认在服务端(Node.js环境)构建页面,但有些npm包是为浏览器设计的,直接访问了documentwindow等浏览器API。在服务端构建时,这些API不存在,就报错了。

我第一次遇到这个问题是用了一个图表库。本地dev模式下能正常显示,因为dev模式是在浏览器里渲染的。但一build,就报document is not defined

常见问题包

  • 依赖DOM操作的UI组件库
  • 浏览器检测库(比如检测设备类型、浏览器版本的)
  • 一些老旧的jQuery插件
  • 直接在模块顶层执行window.xxx的包

解决方案

方案1: 使用client:only指令

告诉Astro这个组件只在客户端渲染,不要在服务端执行:

---
import ProblematicComponent from './ProblematicComponent';
---

<ProblematicComponent client:only="react" />

client:only后面要指定框架名(react/vue/svelte等)。

方案2: 动态导入

等到客户端再加载这个包:

---
// 服务端不导入
---

<script>
  // 客户端动态导入
  const { default: MyLibrary } = await import('problematic-package');
  const instance = new MyLibrary();
</script>

方案3: 条件导入

检查环境后再使用:

let myLib;
if (typeof window !== 'undefined') {
  myLib = await import('problematic-package');
}

方案4: 换一个兼容的包

有时候最简单的解决方案是换个包。比如:

  • nodejs-mysqlmysql2
  • 某些老旧的图表库 → chart.js(对SSR友好)
  • jQuery插件 → 原生JS或现代框架组件

我的建议

在选择第三方包之前,先看看它的文档有没有提到SSR/SSG支持。现在很多流行的库都会明确说明是否支持服务端渲染。如果文档里提到了”works with Next.js”或”SSR compatible”,那基本上Astro也能用。

原因7:Astro版本升级引起的Breaking Changes

典型场景

项目升级到Astro 5(或其他大版本)后,之前能构建的项目突然:

  • 构建卡死,一直不结束
  • 报一些奇怪的模块解析错误
  • 某些API不再可用

常见问题

  1. CommonJS模块解析变化

Astro 5改变了一些模块解析逻辑,之前能用的CommonJS包可能不行了。

  1. API废弃或变更

每个大版本都会废弃一些旧API。比如某些Astro.xxx的方法可能改名或者移除了。

  1. 集成版本不兼容

Astro升级后,一些官方或第三方集成也需要升级到对应版本,否则可能不兼容。

解决策略

逐步升级,不要跳版本

如果你从Astro 3想升到5,别一步到位。先升到4,测试通过后再升到5。这样更容易定位问题。

# 错误做法
npm install astro@latest

# 推荐做法
npm install astro@^4.0.0
# 测试通过后
npm install astro@^5.0.0

使用Astro CLI的升级工具

Astro提供了自动升级工具,能帮你处理一些常见的Breaking Changes:

npx @astrojs/upgrade

这个工具会:

  • 分析你的项目
  • 提示需要升级的依赖
  • 自动修改一些代码(比如废弃的API调用)

升级相关集成

Astro升级后,别忘了升级官方集成:

npm install @astrojs/react@latest @astrojs/tailwind@latest @astrojs/sitemap@latest

有时候构建失败就是因为Astro 5配的还是Astro 4时代的集成版本。

三、不同部署平台的特殊问题

说完了通用的7大原因,再聊聊不同部署平台特有的坑。每个平台都有自己的特点,了解这些能帮你少走弯路。

Vercel部署问题

典型问题1: 构建超时

Vercel免费版有构建时间限制。如果你的项目很大,或者安装依赖很慢,可能会超时失败。

解决方案:

  • 检查package.json,删除不必要的依赖
  • 使用pnpm代替npm,安装速度更快
  • 在项目设置里升级到Pro plan(如果预算允许)

典型问题2: 输出目录配置错误

Vercel需要知道构建产物在哪里。Astro默认输出到dist目录,但如果你改了配置,Vercel可能找不到。

正确配置:

  • Build Command: npm run buildastro build
  • Output Directory: dist(Astro默认)
  • Install Command: npm install

如果你用的是pnpm:

  • Install Command: pnpm install

Cloudflare Pages部署问题

典型问题1: Node.js版本过低

Cloudflare Pages默认使用的Node版本可能比较旧。一定要在根目录创建.nvmrc文件指定版本:

20

或者在项目设置里指定:
Settings → Environment variables → NODE_VERSION = 20

典型问题2: astro-compress导致失败

很多人反馈astro-compress这个包在Cloudflare上会导致构建失败,特别是优化图片后。

如果你遇到这个问题:

  1. 卸载astro-compress: npm uninstall astro-compress
  2. astro.config.mjs里移除它
  3. 用其他方案优化图片,比如Astro内置的<Image />组件

典型问题3: 构建命令配置

Cloudflare Pages的构建配置:

  • Build command: npm run build
  • Build output directory: /dist
  • Root directory: /(如果是monorepo需要调整)

注意Build output directory前面要加/

GitHub Pages部署问题

典型问题1: 页面404或空白

这是最常见的问题,原因是base路径没配置对。

GitHub Pages的仓库URL格式是https://username.github.io/repo-name/,注意那个/repo-name/就是base路径。

必须在astro.config.mjs里配置:

export default defineConfig({
  site: 'https://username.github.io',
  base: '/your-repo-name',  // 仓库名
});

典型问题2: 样式丢失或资源404

如果页面能打开但没样式,或者图片加载不出来,也是base路径的问题。

检查浏览器控制台,看看资源请求的路径对不对。如果请求的是https://username.github.io/style.css,但实际应该是https://username.github.io/repo-name/style.css,那就是base没配置。

四、预防性最佳实践

好,现在你知道怎么解决问题了。但更重要的是,怎么避免未来再踩同样的坑?

建立本地排查工作流

最小化重现(minimal reproduction)

遇到问题时,别急着在原项目里瞎改。先创建一个最小化的测试项目:

npm create astro@latest test-project -- --template minimal
cd test-project
# 只添加有问题的那部分代码或依赖

如果能在最小项目里复现问题,说明确实是某个特定功能或依赖导致的,而不是项目整体的问题。这样排查起来快很多。

善用浏览器控制台和构建日志

开发时记得打开浏览器控制台:

  • Console标签:看JavaScript错误
  • Network标签:看资源加载是否正常
  • Sources标签:调试代码

构建时保存日志:

npm run build > build.log 2>&1

这样即使终端被刷掉了,还能回头查看完整日志。

创建个人错误解决笔记

我自己有个markdown文件,记录遇到过的所有错误和解决方案。格式很简单:

## 错误: SyntaxError: Unexpected token 'with'

**场景**: Vercel部署失败
**原因**: Node版本太低
**解决**: 在Vercel设置Node版本为20.x
**日期**: 2024-11-15

下次遇到类似问题,先翻翻自己的笔记,说不定5分钟就解决了。

项目健康度维护

定期更新依赖

每个月或每季度检查一次依赖更新:

# 查看过时的依赖
npm outdated

# 更新所有依赖到最新版(谨慎使用)
npm update

# 或者一个个更新
npm install astro@latest

但别盲目升级,特别是大版本变化。升级前看看CHANGELOG,了解有没有Breaking Changes。

使用Dependabot自动化依赖更新

在GitHub仓库根目录创建.github/dependabot.yml

version: 2
updates:
  - package-ecosystem: "npm"
    directory: "/"
    schedule:
      interval: "weekly"
    open-pull-requests-limit: 5

Dependabot会自动检查依赖更新,创建PR。你只需要review和merge,省心多了。

编写构建测试脚本

package.json里加个测试脚本:

{
  "scripts": {
    "build": "astro build",
    "test:build": "npm run build && echo 'Build successful!'"
  }
}

配置pre-commit hook

使用husky在提交前自动构建,确保代码能通过编译:

npm install --save-dev husky

# 初始化husky
npx husky init

# 添加pre-commit hook
echo "npm run build" > .husky/pre-commit

这样每次commit前都会先构建,如果构建失败就不让提交。虽然会慢一点,但能避免提交有问题的代码。

有用的调试工具和资源

Astro官方资源

  1. 官方故障排查指南:第一时间看这个
  2. 错误参考手册:列出了所有Astro错误的详细说明
  3. Discord社区:遇到疑难杂症可以在这里求助

有用的命令

# 检查Astro配置是否正确
npx astro check

# 查看详细构建信息
npx astro build --verbose

# 调试模式运行
DEBUG=astro:* npm run dev

社区资源

  • Astro GitHub Issues:搜索已知问题
  • Stack Overflow:搜[astro]标签
  • 中文社区论坛和博客:很多人分享踩坑经验

结论

说了这么多,我们来快速回顾一下。

Astro构建失败90%都是这几个原因:

  1. Node.js版本不兼容:检查是否≥18.17.1或20.3.0+
  2. 依赖包问题:清缓存重装,检查lock文件
  3. Content Collections验证失败:修复frontmatter格式
  4. 环境变量配置不当:在部署平台正确配置,注意PUBLIC_前缀
  5. 配置文件错误:检查base路径,排查集成冲突
  6. 第三方包不兼容SSR:使用client:only或动态导入
  7. 版本升级Breaking Changes:查看迁移指南,逐步升级

记住5步快速排查法:

  1. 检查Node版本
  2. 检查依赖安装
  3. 清缓存重新构建
  4. 检查最近改动
  5. 对比本地和线上环境差异

最重要的是,建立系统性的排查思路。别一上来就慌,先看错误信息,定位错误类型和位置,然后针对性解决。

我刚开始用Astro的时候,遇到构建错误经常要折腾几个小时。但有了这套方法论后,现在基本5-10分钟就能定位并解决问题。希望这篇文章也能帮你少走弯路。

最后提醒一点:版本迭代很快,这篇文章写的时候是2024年底,Astro最新稳定版是4.x。如果你看到这篇文章的时候Astro已经6.0甚至7.0了,记得对照官方文档最新说明,因为具体的API和错误信息可能有变化。但排查思路是通用的,这些方法论依然适用。

遇到新问题欢迎留言分享,咱们一起完善这份排查指南。收藏起来,下次遇到构建失败直接翻出来对照着查,省时又省心。

发布于: 2025年12月3日 · 修改于: 2025年12月15日

评论

使用 GitHub 账号登录后即可评论

相关文章