快速开始
- 在 GitHub 上 Fork 仓库
- 克隆你的 fork 到本地:
- 安装依赖:
- 创建功能分支:
- 启动开发服务器:
代码风格与规范
本项目遵循特定的模式以保持一致性: TypeScript- 启用严格类型检查,尽量避免使用
any - 数据结构使用 interface,联合类型使用 type
- 优先使用
const而非let,绝不使用var
- Services(
src/services/)处理数据获取与业务逻辑 - Components(
src/components/)处理 UI 渲染 - Config(
src/config/)包含静态数据与常量 - Utils(
src/utils/)包含共享的辅助函数
- 耗时计算应放在 Web Worker 中运行
- 列表项超过 50 条时使用虚拟滚动
- 对外部 API 调用实现熔断器
- 代码应通过清晰的命名实现自文档化
- 仅在算法或变通方案不明显时才添加注释
- 永远不要提交被注释掉的代码
安全与输入校验
仪表盘处理来自数十个外部来源的不可信数据。纵深防御措施可防止注入攻击与 API 滥用。XSS 防护
所有对用户可见的内容在插入 DOM 之前都会被净化:- 新闻标题与来源(RSS feeds)
- 搜索结果与高亮
- 监控关键词(用户输入)
- 地图弹窗内容
- 紧张关系配对标签
mark 元素高亮在包裹匹配项之前先对文本进行转义,防止通过构造恶意搜索查询进行注入。
代理端点校验
公开 API 入口对所有参数进行校验与限幅:
这可防止上游 API 滥用以及因格式错误请求导致的速率限制耗尽。
内容安全
- URL 通过
URL()构造函数校验,仅允许http:与https:协议 - 外部链接使用
rel="noopener"以防止反向标签劫持 - 没有内联脚本或
eval(),所有代码在构建时打包
安全相关贡献
- 渲染用户可控或外部数据时始终使用
escapeHtml() - 对来自外部来源的 URL 使用
sanitizeUrl() - 在 API 代理端点中校验并限幅参数
提交 Pull Request
-
确保代码可构建:
- 在浏览器中手动测试你的改动
-
编写清晰的提交信息:
-
推送到你的 fork:
-
提交 Pull Request,需包含:
- 清晰描述改动的标题
- PR 做了什么以及为什么的说明
- UI 改动的截图
- 任何破坏性变更或迁移说明
优秀的 PR 应具备什么
贡献类型
Bug 修复- 发现问题?修复它并提交 PR
- 在 PR 描述中提供复现步骤
- 新的数据图层(需有公开 API 来源)
- UI/UX 改进
- 性能优化
- 新的信号检测算法
- 用于新闻聚合的额外 RSS feeds
- 新的地理空间数据集(基地、基础设施等)
- 现有数据的替代 API
- 澄清现有文档
- 添加示例与用例
- 修复错别字并提升可读性
- 通过 GitHub Issues(非关键)或邮件(关键)报告漏洞
- XSS 防护改进
- 输入校验增强
评审流程
- 提交 PR 时运行自动化检查
- 数日内进行维护者评审
- 通过向同一分支提交 commit 来处理反馈
- 批准后合并
