乐于分享
好东西不私藏

给 WXT 开发的 Chrome 插件 · 自动发布

给 WXT 开发的 Chrome 插件 · 自动发布
FIELD NOTE · WXT RELEASE2026.08

记录一次配置过程

给 WXT 开发的 Chrome 插件配置自动发布

Chrome Web Store · Service Account · 一次配置

把插件发布交给 API

TUTORIALAPI

EDITOR'S NOTE

WHY AUTOMATE

插件每次更新都要重新打包,再打开开发者后台选择 ZIP、上传、提交审核?这些步骤可以交给 Chrome Web Store API

不需要先弄懂 API,也不用再注册一个真人邮箱。先配置一次,之后每次发布只需要执行一条命令。

发布为什么会变成最麻烦的一步

插件功能写完后,发布反而成了最麻烦的环节:

  • 改完代码,要手动打包;
  • 打开 Chrome Web Store Developer Dashboard;
  • 找到对应插件;
  • 上传 ZIP;
  • 再点击提交审核;
  • 换一台电脑,还要重新配置一遍。

传统的 OAuth 配置还要保存 refresh_token。它一旦过期、被撤销,或者授权账号换了,发布流程就可能失效。

这次我用 Google Cloud 的 Service Account 配合 Chrome Web Store API。配置完成后,发布只剩下一条命令。

01

PART

为什么用 Google Cloud Service Account

IDENTITY · 身份

这里会用到两个账号:个人 Google 账号和 Service Account。它们负责的事情不同,先分清这一点,后面的配置就不会串。

你的个人 Google 账号

它负责登录 Chrome Web Store Developer Dashboard,管理插件所在的 Publisher,再把发布权限授权给程序账号。

Service Account

它是 Google Cloud 生成的程序账号,格式和 Gmail 邮箱一样,但不是第二个 Gmail:

  • 没有收件箱;
  • 不需要再注册一个真人账号;
  • 不能代替你登录普通网页;
  • 脚本通过 JSON key 调用 API。

个人账号负责授权,Service Account 负责调用 API。

02

PART

我为什么选 Service Account

CHOICE · 取舍

不依赖个人 refresh token

传统 OAuth 方案要保存 client_idclient_secret 和 refresh_token。其中任何一项失效,自动发布就可能中断。

Service Account 每次用 JSON key 生成短期 access token,不需要手动维护 refresh token。

更适合多个插件

如果多个插件属于同一个 Chrome Web Store Publisher,可以共用:

  • 同一个 Service Account;
  • 同一个 JSON key 文件;
  • 同一个 Publisher ID。

每个插件只需要使用自己的 Extension ID,不用为每个插件重新创建账号。

少做几步手工操作

配置好以后,日常只需要改版本号,再执行项目里的 release 命令。打包、上传和提交审核由脚本完成。

私钥可以只放在本机

这次做的是本地发布,所以把 JSON 私钥放在项目目录之外就够了,不需要先搭建 CI。以后如果要接 GitHub Actions,再把私钥放进 GitHub Secrets,发布逻辑不用改。

03

PART

准备工作

CHECKLIST · 准备

先准备四样东西:

01 Google 账号

一个完成 Chrome Web Store Developer 注册的 Google 账号,注册金额是一次性 5 美元;

02 Google Cloud Project

一个 Google Cloud Project;

03 Service Account

一个 Service Account 和它的 JSON key;

04 Chrome Web Store 插件条目

一个已经在 Chrome Web Store 建好的插件条目。

注意

如果插件还没有商店条目,API 只能更新已有条目。第一次上架和填写商店资料,还是要在后台手动完成。

04

PART

在 Google Cloud 创建 Service Account

SETUP · GOOGLE CLOUD

第一步:创建或选择 Project

打开 Google Cloud Console,先在顶部选择一个已有项目。

如果还没有项目,点击右上角的创建按钮。

Project 名称可以填:

TEXT

Browser Extension Publishing

这个 Project 只是 Google Cloud 里的容器,用来启用 API 和存放 Service Account。后面配置 CHROME_PUBLISHER_ID 时,不填它。

第二步:启用 Chrome Web Store API

在 Google Cloud Console 顶部搜索 Chrome Web Store API

打开搜索结果,点击 Enable

第三步:创建 Service Account

左侧菜单依次打开 IAM & Admin → Service Accounts → Create service account

名称可以填:

NAME

extension-publisher

创建过程中如果要求分配 Project Role,可以先跳过。Chrome Web Store 的插件权限不在这里授予,下一步还要到 Developer Dashboard 配置。记住这个 Service Account 的邮箱,后面会用到。

第四步:创建 JSON key

进入刚创建的 Service Account:

  • 点击 Keys;
  • 点击 Add key;
  • 点击 Create new key;

选择 JSON,再点击 Create

浏览器会下载一个 JSON 文件。里面通常有:

  • client_email:Service Account 的邮箱地址;
  • private_key:用于签名的私钥。

这个文件只会下载一次,是脚本访问 API 的凭证。不要把它上传到 Git,也不要发到聊天窗口或截图分享。

05

PART

把 Service Account 授权给 Chrome Web Store

AUTH · 授权

打开 Chrome Web Store Developer Dashboard,登录管理这个插件的个人 Google 账号。

按下面的路径操作:

  • 左侧点击 Account;
  • 找到 Service accounts;
  • 添加第四步 JSON 文件里的 client_email;
  • 点击保存。

Google Cloud 只负责创建 Service Account,Chrome Web Store 的插件权限要在这里授予。把账号添加到 Service accounts 后,脚本才可以访问插件。

如果后台已经绑定了另一个 Service Account,不要直接删除。一个 Publisher 通常只绑定一个 Service Account,这时应使用已绑定账号对应的 JSON key。

06

PART

最终配置

CONFIG · 配置

完成前面的步骤后,在每个 WXT 插件项目的根目录创建 .env.submit 文件,最终配置如下:

ENV

CHROME_EXTENSION_ID=你的插件ID

CHROME_PUBLISHER_ID=你的Publisher ID

CHROME_SERVICE_ACCOUNT_KEY_FILE=~/.config/chrome-web-store/service-account.json

CHROME_SKIP_SUBMIT_REVIEW=true

下面逐行解释这些值从哪里来,以及它们分别控制什么。

CHROME_EXTENSION_ID

这是某一个插件自己的唯一 ID。打开插件的 Chrome Web Store 页面,复制 URL 中 /detail/ 后面的那段字符串:

URL

https://chromewebstore.google.com/detail/插件名称/这里就是Extension-ID

注意

每个插件的 ID 都不同,不能把 A 插件的 ID 填到 B 插件里。除了 URL,也可以在插件详情页顶部找到它。

CHROME_PUBLISHER_ID

这是发布者账号的 ID,同一个 Publisher 下的多个插件共用一个值。

获取路径:

PATH

Chrome Web Store Developer Dashboard

→ Publisher

→ Settings

→ Publisher ID

记住区别

Publisher ID 代表“谁在发布”,不是 Gmail 地址、Google Cloud Project ID,也不是插件自己的 Extension ID。在上面的 Settings 页面就能找到它。

CHROME_SERVICE_ACCOUNT_KEY_FILE

这是第四步下载的 JSON key 文件在本机的存放路径。这里填的是文件路径,不是 Service Account 邮箱。建议把 JSON key 放在项目目录之外,并使用一个与具体插件无关的公共路径,这样同一个 Publisher 下的多个 WXT 插件可以复用。

CHROME_SKIP_SUBMIT_REVIEW

这个值控制上传后是否提交审核:

  • true:只上传,不提交审核,适合第一次测试;
  • false:上传后自动提交审核。

建议首次配置时使用 true,确认配置无误后再改成 false。这个值是发布策略,不是从 Google Cloud 或 Chrome Web Store 后台获取的。

SECURITY NOTE

同一个 Publisher 下的多个 WXT 插件,通常只需要更换 CHROME_EXTENSION_ID。CHROME_PUBLISHER_ID 和 CHROME_SERVICE_ACCOUNT_KEY_FILE 可以复用。JSON key 和 .env.submit 都不要提交到 Git,尤其要保护 private_key。

///

END

顺便介绍一下 EnglishCC

A SMALL PLUG-IN · 推荐

最后推荐一下我自己开发的 EnglishCC。它是一个 Chrome 浏览器插件,主要用于通过 YouTube 视频学英语。

它会把视频字幕重新整理得更适合阅读。遇到不认识的单词,可以直接点击查询,也可以把想记的词保存下来,之后继续在字幕和复习中使用。

目前我主要把 YouTube 的体验做好了,Bilibili 还在继续适配,支持还不完整。如果你平时用 YouTube 学英语,可以试试 EnglishCC。

EnglishCC.com

我是烂人文,分享一些好玩的。

如果你觉得今天这篇有收获,欢迎点赞、在看、转发三连,我们下篇见。

点赞
在看
转发

THANKS FOR READING