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), 暗色界面, 自动化攻击, 静态分析