用途:该技能面向 firebase-tools 仓库的日常开发,指导完成分支或 worktree 搭建、依赖管理、测试改动以及提交 PR。
工作区准备:单任务可直接在克隆仓库中创建分支:git checkout main、git pull origin main、git checkout -b {branch_name}。并行任务推荐使用 Git worktree:git fetch origin main,git worktree add -b {branch_name} ../firebase-tools-worktrees/{branch_name} origin/main,随后进入该目录。小型改动可在新 worktree 中软链接主克隆的依赖:ln -sfn ../firebase-tools/node_modules node_modules,从而省去完整 npm install。
环境与依赖:CLI 支持 Node 20 及以上。更新依赖或修改 package.json 时,需用 Node 24 同步 npm-shrinkwrap.json(nvm use 24 && npm install --package-lock-only),并提交 diff 以通过 CI 的 check-package-lock (24) 检查。仓库在 CI 中强制 Prettier 格式,提交前对改动文件(含 .yaml、.json)运行 npm run format,或用 npx prettier --check 校验;同时运行 npm run lint。CLI 编译为 CommonJS,独立二进制内置 Node 20.x,不支持未加 flag 的 require(esm);仅在 CLI 初始化时急于加载的文件中,不要静态导入 ESM-only 依赖,应使用动态 import() 惰性加载(可参考 src/streamJson.ts 中 new Function("url", "return import(url)") 的写法,以避免 ts-node 将 import() 改写为 require())。
验证与提交:在 workspace 或 worktree 目录中运行 npm run build 和 npm test;单测可用 npm test -- src/test/path/to/test.spec.ts。用户可见改动需在 CHANGELOG.md 中追加条目:以过去式动词开头,不加 [fixed] 之类括号标注,若对应 GitHub issue 则以 (#<issue_number>) 结尾。
PR:推送分支后,用 GitHub CLI 创建 PR,直接分支用 gh pr create --repo firebase/firebase-tools --head {branch_name} --base main --title "..." --body "...";fork 用 --head <your-github-username>:{branch_name}。传入 --title 和 --body 可避免交互式输入,进行中的 PR 可加 --draft。