跳到主要内容

记一件滑稽的事

· 阅读需 3 分钟
泥豆君
哇!是泥豆侠,我们没救了

先说结论:使用 "write-translations": "docusaurus write-translations" docusaurus cli 命令 构建的翻译文件中的部分文本会强制为当前的文本。若后续修改了源码中的对应文本,可能出现文本被覆盖的现象。

嗯,怎么说呢。

本来使用 node 的钩子名来创建不同的打包环境的环境值。

packages.json 文件部分内容
{
"scripts": {
// 测试启动
"start": "jja run PORT=42099 docusaurus start",
// 普通测试
"dev": "pnpm run start",
// 模拟打包到 earthnutDev.github.io 测试
"dev:io": "jja run TARGET_DOMAIN=io pnpm start",
// 模拟打包到 lmssee.com 测试
"dev:com": "jja run TARGET_DOMAIN=com pnpm start",
// 模拟打包到 earthnut.dev / earthnut.pages.dev 测试
"dev:cf": "jja run TARGET_DOMAIN=cf pnpm start",
// 写入 JSON 翻译文件
"write-translations": "docusaurus write-translations",
// 给网站的 Markdown 文档添加明确的标题 ID。
"write-heading-ids": "docusaurus write-heading-ids"
}
}

发现使用 pnpm dev 测试结果很好,于是发布到服务器。

问题也就是这个时候接踵而至。

发现服务器中部分文本使用的测试文本(该文本由 docusaurus.config.ts 通过读取环境值判定而来)。

当时刚把项目公共部分做了抽离,于是怀疑是作为“三方”包的导出导致的异步问题。

原本导出为变量
export let target_domain = DEVELOPMENT_TYPE;
if (globalThis?.process?.env) {
target_domain = globalThis?.process?.env?.TARGET_DOMAIN ?? DEVELOPMENT_TYPE;
}

一、五大贱人

后来就询问 AI 5 大贱人。一致给出结果是“ docusaurus 缓存问题”、“导出变量异步加载导致的读取错误”...

一顿折腾,人都快奔溃了。什么清理缓存、清理依赖、清理安装包、清理 'pnpm-lock.yaml'。。。

就差重装电脑了 😭😭

无论使用哪个启动值,发现都是于事无补。

5 大贱人还跟我说什么这是因为 docusaurus 的编译分好几个步骤,每一个步骤可能负责的工作不同,可能是某一个步骤进行时还未完全初始化环境变量。

就像编写 a-common 包时遇见的囧事。

二、初见端倪

在这个问题耽搁了近 5 个小时,我居然没想着如果把测试的文本改一下看看是否会是新的测试文本展示。

终于,在功夫不负粗心汉。

我还是更新了纯测试环境文本,发现了在纯测试环境下依旧是旧值(我没有那么聪明,一下子能想到是 'i18n' 文件夹在捣乱,而是从抓耳挠腮变成了七窍生烟、火冒唐三藏)。

我想在,看来还是有地方的缓存没有清理干净。

于是,又是一个小时!!!

三、问题解决

后来在编译器使用全项目检索当前展示文本,发现当前仅有 'i18n/docusaurus-theme-classic/navbar.json' 文件中有该文本的痕迹。

愤怒、委屈、不甘。。。

说实话,我都想锤自己一顿。

还能怎么办,删了 'i18n' 文件夹呗。难不成真的要打自己一顿。

四、原因总结

粗心永远是我最大的敌人。

另一个就是对知识点掌握的不足,如果能知道 'i18n' 文件将覆盖运行时,也不至于让自己变得很狼狈。