nohardcoding-git/nohardtext

GitHub: nohardcoding-git/nohardtext

NoHardText 是一款专注于在 React/TSX 项目中检测硬编码 UI 文本的 CLI 工具,帮助团队在代码进入生产环境前完成本地化合规检查。

Stars: 0 | Forks: 0

# 无 HardText **永远不再发布硬编码的 UI 字符串。** NoHardText 是一个专注的 CLI 工具,用于在硬编码的用户可见文本进入生产环境之前,检测出 React/TSX 项目中的这些问题。 它帮助前端团队解答一个关键的发布问题: ## 状态 稳定版 `0.1.0`。 核心扫描功能计划保持免费,以便开发者和团队能轻松在本地开发和 CI 中采用。 ## 安装 ``` npm install -D @nohardcoding/nohardtext ``` 运行扫描: ``` npx nohardtext scan src ``` 检查已安装的版本: ``` npx nohardtext --version ``` 在不将其添加到项目的情况下使用: ``` npx --package @nohardcoding/nohardtext nohardtext scan src ``` ## 检测内容 ``` // ❌ Hardcoded UI text export default function App() { return ; } ``` ``` NHT1001 - JSX Text Hardcoded JSX text found: "Save" Can I ship? No ``` 允许使用已本地化的代码: ``` // ✅ Localized UI text export default function App() { return ; } ``` ``` Findings: 0 Can I ship? Yes ``` ## 当前规则 | 规则 ID | 规则 | 类别 | 默认严重程度 | 描述 | |---|---|---|---|---| | `NHT1001` | JSX Text | localization | high | 检测 JSX 节点内硬编码的用户可见文本 | | `NHT1002` | Placeholder Attribute | localization | high | 检测硬编码的 placeholder 属性值 | | `NHT1003` | Title Attribute | localization | high | 检测硬编码的 title 属性值 | | `NHT1004` | ARIA Label | accessibility | high | 检测硬编码的 `aria-label` 属性值 | | `NHT1005` | Alt Attribute | accessibility | high | 检测硬编码的图片 `alt` 文本 | | `NHT1006` | Component Text Prop | localization | high | 检测通过常见自定义组件 props 传递的硬编码文本 | ## 支持的模式 NoHardText 目前支持: - React / TSX 扫描 - JSX 文本检测 - 静态 JSX 属性检测 - 静态 JSX 表达式字符串 - 动态 template literal UI 字符串 - 条件和逻辑表达式字符串 - 常见本地化调用的忽略 - React Intl 模式 - React i18next `` 模式 - 自定义组件文本 prop 检测 - 常见的真实场景组件文本 props - 对常见技术 props 的低噪处理 - 跳过常见非生产文件和文件夹的默认设置 - JSON 报告 - GitHub Actions 批注输出 - 官方可复用的 GitHub Action - CI 失败阈值 - 规则配置 - 本地化健康评分 - 发布安全检查 - 扫描质量回归测试 - 真实场景的扫描质量测试用例 ## CLI 用法 扫描路径: ``` npx nohardtext scan src ``` 输出 JSON 结果: ``` npx nohardtext scan src --json ``` 将 JSON 结果写入文件: ``` npx nohardtext scan src --json --output nohardtext-report.json ``` 输出 GitHub Actions 批注: ``` npx nohardtext scan src --fail-on high ``` 在达到严重程度阈值时使 CI 失败: ``` npx nohardtext scan src --fail-on high ``` 允许的严重程度: ``` info low medium high critical ``` 列出支持的规则: ``` npx nohardtext rules ``` 显示帮助: ``` npx nohardtext --help ``` ## 示例输出 ``` NoHardText CLI Scanned files: 1 Findings: 1 Can I ship? No Reason: 1 high-severity localization findings found. Localization grade: A Localization score: 88 / 100 Top issues: NHT1001 - JSX Text: 1 finding (high, localization) Example: Hardcoded JSX text found: "Save" ``` ## JSON 报告 ``` npx nohardtext scan src --json --output nohardtext-report.json ``` JSON 报告包括 schema 版本、生成时间、扫描的文件、发现的问题、严重程度摘要、规则细分、类别细分、主要问题、本地化健康评分、发布决策和 CI 元数据。 ## GitHub Actions ### CLI 批注 NoHardText 可以生成 GitHub Actions 批注语法: ``` npx nohardtext scan src --github-annotations --fail-on high ``` 基本工作流示例: ``` name: NoHardText on: pull_request: push: branches: - main jobs: nohardtext: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: 20 - run: npm install -D @nohardcoding/nohardtext - run: npx nohardtext scan src --github-annotations --fail-on high ``` ### 官方可复用 Action NoHardText 还从此仓库提供了一个可复用的 GitHub Action: ``` name: NoHardText on: pull_request: push: branches: - main jobs: nohardtext: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: 20 - uses: nohardcoding-git/nohardtext@main with: path: src fail-on: high github-annotations: "true" ``` 对于生产环境使用,请在下一次补丁发布后锁定到 release tag,而不是使用 `main`。 ## 采用路径 对于现有项目,在阻断 CI 之前,请先从观察模式开始: ``` npx nohardtext scan src --json --output nohardtext-report.json ``` 然后转到警告模式: ``` npx nohardtext scan src --github-annotations ``` 在审查发现的问题并调整配置后,启用阻断模式: ``` npx nohardtext scan src --github-annotations --fail-on high ``` 推荐的推广方案: ``` observe -> warning -> blocking ``` ## 配置 NoHardText 支持 root 配置文件: ``` nohardtext.config.json ``` 示例: ``` { "ignore": ["storybook-static"], "failOn": "high", "componentTextProps": ["message", "text"], "rules": { "NHT1001": "high", "NHT1002": "medium", "NHT1003": "off" } } ``` ## 示例 扫描故意包含问题的 React 示例: ``` npx nohardtext scan examples/react-basic/src ``` 扫描干净的本地化示例: ``` npx nohardtext scan examples/react-clean/src ``` ## 开发 ``` pnpm install pnpm build pnpm typecheck pnpm test ``` 运行发布安全检查: ``` pnpm release:version pnpm release:check pnpm release:pack pnpm release:publish-plan ``` ## 包 - `@nohardcoding/nohardtext` - `@nohardcoding/nohardtext-detect-engine` - `@nohardcoding/nohardtext-parser` - `@nohardcoding/nohardtext-report-engine` - `@nohardcoding/nohardtext-rule-engine` - `@nohardcoding/nohardtext-domain` ## 产品方向 NoHardText 旨在成为前端项目中本地化的质量门禁。 已完成的基础建设: - CLI 扫描 - JSON 报告 - GitHub Actions 批注 - 官方可复用的 GitHub Action - 非阻断式采用文档 - 评分方法论文档 - 真实场景的扫描质量覆盖 计划中的工作: - ESLint 插件 - VS Code 扩展 - 自动修复建议 - 托管报告 - 团队仪表板 - PR 评论 - 发布趋势报告 ## 付费支持 核心 CLI 扫描是免费的。 付费服务及未来的付费功能可能包括本地化审计、NoHardText 设置帮助、CI 集成、团队报告、托管仪表板、PR 评论和扫描历史记录。 ## 许可证 MIT License。 版权所有 (c) 2026 NoHardCoding
标签:MITM代理, React, Syscalls, 云安全监控, 代码扫描工具, 前端框架, 国际化(i18n), 无障碍(a11y), 暗色界面, 自动化攻击, 静态分析