dub CLI 如何完成本地构建、npm link 与 dub login 首次登录
【免费下载链接】dubThe modern link attribution platform. Loved by world-class marketing teams like Framer, Perplexity, Superhuman, Twilio, Buffer and more.项目地址: https://gitcode.com/GitHub_Trending/du/dub
如果你需要脱离 dub.co 网页控制台、在终端里直接调用 Dub API 创建短链,就要用到dub-cli——dub 仓库packages/cli目录下提供的命令行工具。它通过 OAuth 登录 Dub 平台,把访问凭据保存在本地,之后就能用dub命令执行login、config、domains、shorten、links等子命令。
本文覆盖的任务是:在本地把dub-cli构建出来,通过npm link注册为全局dub命令,完成dub login首次登录,并验证登录是否真正生效。依据是仓库中的 packages/cli/README.md 及其指向的源码。
准备条件
- 项目使用 pnpm 工作区管理(根目录有 pnpm-workspace.yaml),先在仓库根目录安装依赖,再进入 CLI 包目录。
- packages/cli/package.json 中定义了构建与运行脚本,这也是后文所有
pnpm命令的来源:
| 脚本 | 实际命令 | 用途 |
|---|---|---|
dev | tsup --watch | 监听模式构建,开发时使用 |
build | tsup | 一次性构建产物 |
start | node dist/index.js | 直接以 Node 运行构建产物 |
构建产物输出到packages/cli/dist/index.js,即 tsup.config.ts 中的outDir: "dist",入口为src/index.ts。package.json的bin字段把dub命令映射到./dist/index.js,所以npm link之后全局可用的就是dub。
构建并 link:让dub命令全局可用
packages/cli/README.md 的 “Testing Production-like Setup” 章节给出了主路径。开始前先注意文档中的警告:如果之前已全局安装过dub-cli,先卸载它,避免冲突。
克隆仓库、安装依赖后进入 CLI 目录:
cd packages/cli构建包:
pnpm build将包 link 到全局:
npm link验证安装,确认
dub命令可执行并输出版本号(-v, --version选项在 src/index.ts 中注册):dub -v之后即可在任意目录运行子命令:
dub [command]
可选分支:如果只是想边改代码边调试,不需要npm link。README 的 “Running Locally for Development” 章节的做法是在一个终端运行pnpm dev(即tsup --watch,持续重新构建),在另一个终端运行pnpm start [command]执行命令,用pnpm start help查看全部可用命令。这条路径只服务于开发调试,不产生全局dub命令。
dub login:OAuth 浏览器登录流程
dub login的作用是登录 Dub 平台。看 packages/cli/src/commands/login.ts 的实现,它执行时会做三件事:
- 生成一个
codeVerifier,并固定回调地址为http://localhost:4587/callback; - 通过 OAuth 授权码流程(
oauthClient.authorizationCode.getAuthorizeUri,申请links.read、links.write、domains.read三个 scope)拿到授权 URL,然后调用open包自动打开浏览器; - 启动本地回调服务等待授权结果。
回调服务在 packages/cli/src/api/callback.ts 中:它监听4587端口,收到/callback?code=...后换取accessToken、refreshToken、expiresAt,写入本地配置,最后终端会打印绿色的Logged in successfully!,浏览器页面显示Authentication successful! You can close this window.。
所以执行首次登录的操作就是:
dub login然后跟随浏览器中弹出的授权页完成登录授权即可。两个值得知道的边界,均来自源码:
- 如果回调请求缺少
code参数,服务会返回 400 并提示Authorization code not found. Please start the login process again.,需要重新运行dub login; - 回调服务设置了 300 秒(
setTimeout(..., 300000))的超时,超时后进程直接退出,此时同样需要重新开始登录。
验证登录是否生效
登录成功与否不能只看终端提示,可以从两处核对:
本地配置文件。
setConfig使用Configstore("dub-cli")持久化凭据(见 packages/cli/src/utils/config.ts),写入的字段包括access_token、refresh_token、expires_at,login流程还会带上domain: "dub.sh"。运行下面命令可以查看当前配置的 workspace 凭据(config子命令会打印这份配置的 JSON):dub configdub config成功时终端显示Configuration file successfully retrieved并输出带颜色的 JSON 凭据。未登录时的报错行为。所有依赖凭据的命令都会先调用
getConfig();如果本地还没有任何配置,会抛出:Access token not found. Please run `dub login` to authenticate with Dub.也就是说,如果你跳过登录直接运行
dub shorten等命令,看到这条报错就按提示先dub login。另外getConfig内置了过期处理:当expires_at已过时,它会用refresh_token自动刷新并写回新凭据,不需要手动重新登录。
登录后的首个操作:创建一个短链
首次登录的最终目的是能用 CLI 干活。以创建短链为例,packages/cli/src/commands/shorten.ts 支持两种用法:
dub shorten https://example.com my-key即直接传入目标 URL 和短链 key;不传参数时则进入交互式提示,依次询问Destination URL和Short link(key 会预填一个随机值)。创建成功后终端显示New short link created!并以绿色打印生成的短链;失败时显示Failed to create link并抛出错误。
README 中列出的其余命令可在登录后按需使用:dub domains配置 workspace 域名,dub links -s <search>按名称搜索链接,dub links -l <limit>限制返回条数(默认 10),dub help [command]查看具体命令的帮助。
到这里,本地构建、全局 link、首次登录这条路径就完整了:pnpm build+npm link让dub命令可用,dub login完成 OAuth 授权并落盘凭据,dub config能读到凭据即代表登录生效,之后的dub shorten等操作都会自动复用(并在过期时刷新)这份配置。
【免费下载链接】dubThe modern link attribution platform. Loved by world-class marketing teams like Framer, Perplexity, Superhuman, Twilio, Buffer and more.项目地址: https://gitcode.com/GitHub_Trending/du/dub
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考