news 2026/8/23 12:16:35

如何向Pokémon Showdown Client提交第一个PR?Linter规则、类型检查与测试完整清单

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
如何向Pokémon Showdown Client提交第一个PR?Linter规则、类型检查与测试完整清单

如何向Pokémon Showdown Client提交第一个PR?Linter规则、类型检查与测试完整清单

【免费下载链接】pokemon-showdown-clientThe client for Pokémon Showdown项目地址: https://gitcode.com/gh_mirrors/po/pokemon-showdown-client

第一次想给Pokémon Showdown Client提代码却不知从哪下手?别担心。这篇文章面向新手,手把手带你跑通本地构建、Linter 检查TypeScript 类型检查测试三大关卡,最后附一份可直接照抄的 PR 自查清单。照着走,你就能自信地发出第一个Pokémon Showdown Client 贡献 PR

为什么这个客户端值得你贡献?

这个仓库是Pokémon Showdown的前端客户端,负责运行play.pokemonshowdown.com,正在用TypeScript + Preact重写新客户端。理解它的加载架构,能让你快速定位该改哪个文件:

  • 第一阶段:基础样式 + 后台模型(client.cssclient-core.ts
  • 第二阶段:基础 UI 与连接(client-main.ts、SockJS、client-connection.ts
  • 第四阶段:重量级面板(对战、队伍编辑器),仅在对战或打开队伍页时才加载

完整架构说明见 CONTRIBUTING.md。

一键搭建本地开发环境

先确认你装了Node.js v20 或更高版本Git,然后克隆仓库并构建:

  1. 克隆项目:git clone https://gitcode.com/gh_mirrors/po/pokemon-showdown-client
  2. 进入目录,执行node build(Windows)或./build(其他系统)
  3. 构建脚本会自动安装依赖、生成config/config.js,并编译出测试页

💡 构建脚本会自动npm install,无需手动装依赖。

本地测试:浏览器打开 play.pokemonshowdown.com/testclient-new.html,即可在不搭建登录服务器的情况下验证改动。若需要已登录账号,在config/testclient-key.js写入你的sid(注意放config/不是play.pokemonshowdown.com/config/)。每次改完代码,重跑一次构建即可。

跑通 Linter:代码风格规则全解析

提交前必须过ESLint检查。项目的规则由两层组成:

  • eslint.config.mjs:按文件类型分组(浏览器 ES3、Node、TypeScript)
  • eslint-ps-standard.mjs:Showdown 共享风格,缩进用 Tab、1tbs 花括号、保留分号、单引号、行宽 120

常用命令(定义在 package.json):

命令作用
npm run lint运行 Linter 检查
npm run fix自动修复可修复的风格问题

几条必须记住的约束(详见 CONTRIBUTING.md):

  • 目标语言为ES3:不能用Map/Set(改用普通对象)、不能async/awaitPromise可以)
  • 可用 polyfill:Array#includesObject.assignString#trim
  • 常见硬规则:eqeqeq(用===)、no-varprefer-constno-fallthrough

🎯 小技巧:写完后先跑npm run fix自动修正格式,再npm run lint看剩余问题,能省一半时间。

类型检查:TypeScript 严格模式入门

新客户端用TypeScript编写,配置见 tsconfig.json,开启了strict: truenoImplicitOverride: true,并且noEmit: true(只做类型检查、不产出文件)。覆盖范围包括play.pokemonshowdown.com/src/replay.pokemonshowdown.com/src/teams.pokemonshowdown.com/src/下的.ts/.tsx

运行类型检查:

npx tsc

对新手最重要的两点:

  • strict模式:变量未初始化、可能为undefined都会报错,养成显式标注的习惯
  • noImplicitOverride:重写父类方法必须写override关键字,漏写会直接报错

测试:用 Node 内置框架验证改动

项目使用Node 原生测试运行器node:test+assert),无需额外安装框架。现有用例:

  • test/battle.test.js:解析一段完整对战日志,校验血量、换人、道具等状态
  • test/ev-optimizer.test.js、test/ev-guesser.test.js:验证 EV 猜测与优化逻辑

运行全部测试:

node --test test/*.js

此外还有两个辅助脚本:test/check-filenames 校验精灵图片命名,test/parse 用于调试文本解析。改动对战或解析逻辑时,务必补一个断言再提交。

提交 PR 前:完整自查清单

一条命令npm test会依次跑完构建 →tsc类型检查 →eslint --max-warnings 0node --test。全部通过,才算真正“绿”。提交前逐项对照:

#检查项命令 / 文件说明
1构建成功node build/ build能编译、生成测试页
2Linter 零警告npm run lint风格、ES3 约束、无no-shadow
3类型检查通过npx tsc(tsconfig.json)strict 模式无报错
4测试全部通过node --test test/*.js覆盖你改动的逻辑
5本地页面验证testclient-new.html浏览器实际跑一遍
6无遗留调试代码删掉console.log、测试 key

小结

Pokémon Showdown Client提第一个 PR 其实并不神秘:装好 Node v20+ →node build起测试页 →npm run fix修风格 →npx tsc过类型 →node --test跑测试,最后按上表逐项勾选即可。把这份清单存好,你后续每一次贡献都能做到又快又稳。祝你早日看到自己的 PR 被合并!🏆

【免费下载链接】pokemon-showdown-clientThe client for Pokémon Showdown项目地址: https://gitcode.com/gh_mirrors/po/pokemon-showdown-client

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/23 12:15:47

猫抓资源嗅探完整指南:五分钟搞定网页媒体下载

猫抓资源嗅探完整指南:五分钟搞定网页媒体下载 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 看在线教程想离线保存,却找不…

作者头像 李华
网站建设 2026/8/23 12:11:56

CSS布局疑难杂症:从上下文原理到另类切图实战

你是不是也遇到过这样的场景:明明按照教程写了display: flex; justify-content: center; align-items: center;,那个该死的div就是不肯乖乖居中?或者,你试图用margin: 0 auto;让一个块级元素水平居中,却发现它纹丝不动…

作者头像 李华