关于 domain-mask
domain-mask 用于在演示或录制时通过自定义域名展示真实网页。它启动本地 HTTPS 反向代理并使用 mkcert 生成受信任证书,同时管理 hosts 条目;仅支持 macOS,且每次运行一个域名。
主要功能
- 01通过展示域名代理目标 URL
- 02使用本地 HTTPS 反向代理
- 03用 mkcert 生成受信任证书
- 04添加并移除 hosts 文件条目
- 05每次运行处理一个展示域名
适用场景
- 01在演示地址栏中显示简洁域名
- 02以自定义域名录制网页
- 03通过受信任的本地 HTTPS 预览目标站点
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ adobe/ skills --skill domain-mask安装后在 Claude Code 中输入/domain-mask确认已加载。
附带文件.releaserc.jsonpackage.json
详细介绍
domain-mask
在演示和录屏中,将 URL 隐藏在自定义域名后。HTTPS 反向代理会让地址栏显示简洁的域名(例如 wknd.adventures),而内容仍由真实 URL(例如 https://main--mysite--org.aem.page)提供。通过 mkcert 获取受信任的证书,不会出现浏览器警告。
要求
- Node 22+、mkcert(
brew install mkcert && mkcert -install)、sudo(端口 443 和/etc/hosts) webCLI(此命令不需要playwright-cli)。只需定位一次:
# <skill-dir> is the directory containing this SKILL.md
WEB=$(command -v web || echo "node <skill-dir>/../../cli/dist/web.mjs")
然后运行 $WEB …;它会在标准输出中准确打印一个 JSON 文档,因此可以安全地运行 $WEB … > file.json。
发布后可使用备用方案:npx -y @adobe/web-cli。请使用绝对路径 <skill-dir>;不要 cd 进入该目录。
工作流
步骤 1:收集输入
向用户询问(或从其消息中提取):
- 显示域名:要显示的域名(例如
wknd.adventures) - 目标 URL:要代理的真实 URL(例如
https://gabrielwalt.github.io)
步骤 2:检查前置条件
which mkcert || echo "Install mkcert: brew install mkcert && mkcert -install"
如果缺少 mkcert,请告知用户安装它,并运行一次 mkcert -install。
步骤 3:让用户启动代理
该命令会提示输入 sudo 密码,并在前台持续运行,直到按下 Ctrl+C,因此应让用户在自己的终端中运行。将 WEB 替换为解析后的值,再提供命令:
sudo env CAROOT="$(mkcert -CAROOT)" $WEB mask "<display-domain>" "<target-url>"
CAROOT 会在运行 sudo 之前解析,因此 mkcert 会使用用户安装的 CA 签名,而不是 root 家目录下的 CA;后者不会被浏览器信任。
没有 root 权限时,命令会以状态码 2(USAGE)退出。
该命令会将 127.0.0.1 <display-domain> 添加到 /etc/hosts,通过 mkcert 生成受信任的证书,在端口 443 上启动 HTTPS 反向代理,并打印 { url, displayDomain, targetUrl }。
告知用户:
- 打开
https://<display-domain>;地址栏会显示显示域名和挂锁图标 - 完成后按 Ctrl+C:hosts 条目会被移除,证书也会清理
步骤 4:确认清理完成
用户停止代理后,检查 hosts 条目是否已移除(没有输出表示清理完成):
grep -Fx '127.0.0.1 <display-domain>' /etc/hosts
如果该行仍然存在,请让用户将其移除。将点号转义,使 sed 只匹配该行,例如,对于 wknd.adventures:
sudo sed -i '' '/^127\.0\.0\.1 wknd\.adventures$/d' /etc/hosts
限制
- 仅支持 macOS(
/etc/hosts路径、brew install mkcert) - 需要 sudo(特权端口 443 和 hosts 文件)
- 每次调用只能使用一个显示域名
- 不会重写 HTML/CSS/JS 响应正文中的 URL