豆备 DOUBAK
← 开发日志

名字里一个关键词都没有

商店标题写着「豆备 Doubak」。而这一格改不了后台——它取自 manifest.json, 得改代码、重新打包、重新过审。

起点是一件挺难看的事:搜「doubak」,搜不到这个项目。 搜出来的是豆包——字节那个 AI 助手,量级差着好几个数量级。 「豆备」和「豆包」差一个字,拼音只差一个字母,搜索引擎和商店的搜索框都会 把 doubak 当成 doubao 的错拼来纠。

这件事没法赢,也不值得赢。真正的结论是另一件: 品牌名不能当获客渠道——每一次安装都得从「豆瓣备份」这种 描述性的词,或者别人的推荐里来。

那就得看看名字里写了什么

豆伴的商店标题是「豆伴:豆瓣账号备份工具」。品牌在前、说明在后, 说明那八个字把 豆瓣备份 / 豆瓣账号备份 / 备份工具 全占了。

这边是「豆备 Doubak」一个关键词都没有。 简短说明那一栏上限 132 个字符,原来写了 37 个——95 个字符的位置空着, 而「广播」和「导入 NeoDB」这两件别人不做的事,一个字都没提到。

改成了「豆备 Doubak:豆瓣备份与原样归档」。句式照抄豆伴,但说明那半句 刻意绕开「备份工具」:那是它用几年安装量和评价占住的头部词, 正面撞上去赢不了。「原样归档」是这个项目与它真正不同的地方, 也是对比表里唯一一条它没法跟的。

而这一格改不了后台

本以为是登录商店后台改两行字的事。不是——商店的名称和简短说明取自 manifest.json,后台是只读的。改它就等于发一个新版本: 改代码、重新打包、重新提交审核。

顺着查下去还有一件更值钱的:分语言的商店页,只对扩展里带了 对应 _locales/<语言> 目录的语言开放。 也就是说这件事的开关也在代码里,不在后台。

繁体不是简体的一个变体。 「備份」和「备份」是两个完全不同的字串,搜索不互通—— 港台用户搜「豆瓣備份」,现在什么也搜不到,而这一格是空的。 英文那边搜 “douban backup” 的结果同样基本是空的。 两页都不需要翻译界面就能开出来。

所以加了三份:zh_CNzh_TWen。 界面本身没有翻译,仍然只有简体中文(面板里写死的中文字符串有 693 条), 繁体和英文的简短说明里都写明了这一点—— 这两页会把读不了简体的人带进来,不先说,换来的是一次白装。

一个装上就炸、而本地全绿的坑

_locales 必须进打包白名单。漏了它,后果不是「名字变回英文」—— manifest.json 里的 default_locale 指着一个不在包里的 目录,Chrome 会整个拒绝加载这个扩展

而打包脚本的 collect() 只在名单里的路径不存在时才抛错; 名单里压根没有的目录,它根本不看。于是本地一切正常、测试全绿, 问题要到上传审核那一刻才出现——那时名字已经改了

这是这个项目反复见到的同一个形状:出问题的那个上下文,本地进不去。 判据只能是静态的——去读代码,而不是跑它。所以加了一条测试直接检查白名单里有没有 _locales,连同另外六条:缺键、键集不一致、超长(名称 75、说明 132, 超了是拒收而不是截断)、default_locale 指向不存在的目录, 以及——

最容易被「修好」的那一条:把 manifest 里那四格写回硬编码。 写死之后本地一切正常,商店页也照开,只是繁体和英文那两页的标题 变成了简体中文——而那正是开这两页的唯一理由。 七条里只有这一条,是把前六条都写完、逐条做变异测试时才发现漏掉的。

顺带:自家英文 README 把两组「8」并成了一句

同一批改动里加了一份英文 README。里头有一句:样张里有 八个作品豆瓣已经删掉,评论和评分都还在。 照着规矩去档案里数了一遍,两处都不成立。

档案里有两组不同的「8」,只重合一个。 一组是豆瓣把条目删掉、标题成了空的那 8 个(7 个游戏、1 部电影); 另一组是被豆瓣剥光的 8 条标记——标题还在,但日期、评分、标签、短评全空。 两组只有一个作品同时属于两边。纯属巧合,也正因为是巧合才危险。

被删掉的那 8 个作品,标记里还留着
短评7 / 8
标签6 / 8
标记日期7 / 8
评分0 / 8
广播里冻住的星3 / 8

没有任何一条标记还带着评分。 活下来的三颗星全部来自广播——广播发出去就不能改,所以它冻住了那一天的星; 而标记只存当前状态,当前状态跟着条目一起没了。 首页那段中文一直是对的(「标记本身没有分数,这颗星只在广播里」), 英文那份把它说反了,而且是在最没法自己去核对的那批读者面前。

这个项目已经记下六次「拿手上的样本推出一个结论」的错。这一次的形状略有不同: 不是样本太小,是两个数字恰好都是 8

更早:把下游搬进扩展,靠的是抄而不是重写 →