@webority/repo-checks

中文文档
0.119.0发布于 2026/11/03SEE LICENSE IN LICENSEES Module零依赖

对webbority React门户网站、React Native应用程序和Razor站点的存储库检查:禁止的和必需的依赖项,仅限pnpm,确切的pin,共享的Biome预设,以及样式、标记和组件代码中的令牌使用。在推之前跑;现有的结果

中文使用文档
文档目录6 节
  1. 使用
  2. 令牌规则:按文件计数
  3. 新规定以警告开始
  4. 现有的发现是:一个只会缩小的基线
  5. 共享的预提交钩子
  6. 版本控制

@webority / repo-checks

仓库检查webbority React web门户和React Native应用。一个命令读取每 应用程序 package.json 在git存储库和报告中,内部规则说它不能有, 必须有,以及它必须如何固定和安装。

它还计算原始尺寸,原始颜色,根字体大小和调色板读取的每一个跟踪风格, 存储库的标记和脚本文件(bootstrap-ui。md→令牌)。

使用

pnpm add -D --save-exact @webority/repo-checks
pnpm exec webority-repo-checks              # every app in the repository
pnpm exec webority-repo-checks apps/portal  # one app folder

应用程序是一个 package.json 谁的 dependencies 持有 react-native (移动)或 react-dom (网络)。一个 react-dom 文件夹中也有 react-native-web 是一个react-native-web演示:它获得了pnpm和Biome检查,而不是门户规则。生物群落和 @webority/biome-config 都是从 package.json 旁边的 biome.json 的嵌套配置 "root": false 参照上面的方法),因此根配置约束的子文件夹不会重复它们。一个 workspace:, file: 或者 link: 引用是本地的,永远不会被视为同步版本。 一个装有 agentation 在其 dependencies 是一个构建工具,而不是一个应用程序。它和其他任何东西(工具根,库)只得到lockfile检查。

每个应用程序也得到Node检查: engines.node (从应用程序的 package.json,否则它旁边的那个 pnpm-lock.yaml)一定是 >=24.15 <25和最近的 .nvmrc 必须持有 24。一个手机应用程序 android/ 文件夹获得Android检查,以及web应用程序的 src/ 导入检查。 这个 missing-export:<file> check运行安装在应用旁边或应用上方文件夹中的Biome,所以它需要 @biomejs/biome 安装;没有一个,它什么也不报告,而且 required:@biomejs/biome 查找失败的应用程序。

发现这意味着什么?
banned:<name>一个依赖规则退役或禁止(ESLint, Prettier, lint-stage, react-toastify, moment等;移动列表是退役库表)
required:<name>每个应用都带有依赖关系(Biome和共享预设,核心和UI包,web上的Bootstrap和react-bootstrap,手机上的Crashlytics)。
not-exact:<name>一、 ^ 或者 ~ 范围内。网络销 @webority/* 和 bootstrap 准确;React Native应用会精确地固定每个依赖项
bootstrap-version5.3.3以外的引导
lockstep:<set>在一个版本上一起发布的包被固定在不同的版本上
pnpm:*一个承诺 package-lock.json 或者 yarn.lock,没有 pnpm-lock.yaml,没有 devEngines.packageManager 的 { "name": "pnpm", "version": "<x.y.z>", "onFail": "error" } (一个普通 npm install 失败了,PNPM拒绝任何其他版本),这是一个遗留问题 packageManager 字段(pnpm会忽略devEngines旁边的字段),或者 pnpm-workspace.yaml 没有 engineStrict: true 和 strictPeerDependencies: true
biome:*没有Biome配置,一个不扩展的配置 @webority/biome-config/biome.jsonc,一个 formatter.lineEnding 或者根 linter.rules,或(手机)号码 __DEV__ 全局的,可以是顶级的,也可以是覆盖中的 includes 覆盖应用程序文件夹
catalogue-copy:<file>下面的web文件 src/components/ 名字像a @webority/ui-react 出口
engines-node-floor:package.jsonengines.node 是不是失踪了 >=24.15 <25
engines-node-floor:.nvmrc否 .nvmrc 在应用程序的上方或下方,否则无法保持 24
android-release-signingandroid/app/build.gradle 没有一个卫兵会扔球吗 GradleException 当请求的任务名称包含 release 签名设置或上传密钥丢失
android-edge-to-edgeandroid/gradle.properties 集合 edgeToEdgeEnabled=false
rn-mainactivity-oncreate-bundle:<file>一、 MainActivity.kt 或者 .java 将一个bundle传递给 super.onCreate;通过 null
metro-bridge:<file>React Native应用程序的入口文件(package.json main、默认 index.js),根 App.js 或者 src/App.js 也不是应用程序的任何其他源文件(外部) node_modules, ios, android 以及构建输出)导入 createMetroBridge 从 @webority/mobile-core/metro 和分配 globalThis.__METRO_BRIDGE__ 从一个 createMetroBridge(...) 电话里面 if (__DEV__) 在同一档案中;react-native-procedures。md→调试:开发桥梁
mobile-production-stamps:<file>移动应用的Android或iOS清单 Expo.plist 将无线更新指向Staging或Development提要,或者 android/gradle.properties 带有 .staging 或者 .development App id,由 mobile-tools prebuild。运行 mobile-tools prebuild --env Production 之前
spa-host-immutable-assets:<file>web应用程序 web.config, staticwebapp.config.json, _headers 或者 spa-host*.json 设置缓存控制 immutable
stale-theme-name:<file>web样式或源文件将0.89.0之前的主题名称作为整个令牌读取(var(--radius), --color-primary-ink). 这些船没有别名。运行 webority upgrade 0.89.0 --path <folder> 有一次,然后 webority brand. --color-primary-text 没有标记。从未在基线中记录
lint:<file>Biome在app文件夹中检查,警告为错误:任何错误或警告。从未在基线中记录;修复发现
web-import-axios:<file>一个web源文件下 src/ 导入 axios; HTTP通过 @webority/web-core
web-import-router:<file>导入web源文件 BrowserRouter 或者 Routes 从 react-router 或者 react-router-dom; 路由是 createBrowserRouter
web-import-env-branch:<file>web源文件如下 import.meta.env.DEV 或者 import.meta.env.PROD; 分支 AppSettings.ENVIRONMENT
missing-export:<file>一个文件导入了一个它的模块没有导出的名称;Biome的React错误警报和未解决的别名没有报告
raw-measure:<file>一个px, rem或em文字,或一个粗细或行距的数字,在填充,边距,间隙,插入,角,字体大小,字体粗细或行高。每个文件计数。
raw-colour:<file>一个六角,一个 rgb() 或者 hsl() 使用数字,或者在颜色属性或样式键中使用名为color的CSS,其中颜色含义所属。每个文件计数。
root-font-size:<file>一、 font-size 或者 font 上声明 html 或者 :root。类型大小采用浏览器的根大小。每个文件计数。
palette-read:<file>对原始调色板步骤的读取(var(--wui-<step>),或者手机 palette. 阅读)或Bootstrap主题颜色(var(--bs-primary), var(--bs-primary-rgb) 或萨斯 $primary(为八种主题颜色),其中颜色的含义所属。消息命名了要读取的含义。每个文件计数。
missing-canvas-key:<file>列表中的第一个JSX标记 .map( Callback),没有 data-canvas 网页或 testID 就一个电话,没有传播。每个文件计数。
repeated-canvas-key:<file>一个引用 data-canvas 或者 testID 相同模块中第二个标签重复的值。每个文件计数。
raw-bootstrap:<file>一、 .jsx, .tsx 或者 .cshtml 文件写入一个原始的引导组件类(btn, card, modal, table, badge, alert, form-control, form-select, form-check-input, pagination, nav-tabs, dropdown-menu, offcanvas, breadcrumb, progress, spinner-border, accordion); 消息命名库组件。修饰语,如 btn-primary 单独不算。每个文件计数。
library-class-restyle:<file>一个产品 .scss 或者 .css 选择器为库主题定义的类命名(a wui-* 组件类或 app-* Shell、导航或TAB类),包括作为祖先(.my-page .wui-card-body, .app-shell.collapsed .app-sidebar .brand-logo); 使用库道具或令牌,或产品类。只设置自定义属性的令牌文件不命名类,也不计数。每个文件计数。
shadowed-library-name:<file>一、 .jsx 或者 .tsx 导入目录组件 @webority/ui-react 在另一个名称下,并以目录名称(import { AppButton as LibraryAppButton } 与 function AppButton),因此它的调用站点被读取为库组件。使用库组件和它的props,或者给产品组件起一个自己的名字。每个文件计数。
rename-wrapper:<file>再出口 @webority/ui-react,其主体只返回一个目录组件的组件,或 _Name.cshtml 偏导是1 <app-*> 元素:导入库名。每个文件计数。
single-use-component:<file>下面的文件 src/components/<feature>/ (不 layout/),或共享的部分下 Pages/Shared/ 或者一个 *.Web.Common 项目,即少于两个文件使用;将其移动到使用它的页面旁边。跳过布局:A _…Layout.cshtml 文件,或者一个 _ViewStart.cshtml 的项目名称 Layout = "<name>"在美国,因为很多地区都叫它这个名字。Razor文件的第一行是 @* layering-allow single-use-component: <reason> *@ 也被跳过了;一个没有理由的标记是一个发现。每个文件计数。
error-summary-title:<file>一、 .cshtml <app-error-summary> 设置一个 title 使用旧的通用措辞(“Please fix the following”,“There were errors”);放下它,库将写入标准标题。计算的标题或命名失败操作的标题不计算在内。每个文件计数。
route-internal-id:<file>路由绑定了一条记录的内部编号:A .cshtml @page 或者c# [Route], [Http*] 或者 Map* 模板的 id 或者 ...Id 参数受限 int 或者 long,或 asp-route-* 传递记录的链接 .Id。通过公共id ({publicId:guid})。一个无类型 {id} 不计算在内。每个文件计数。
oversize:<file>一、 .jsx, .tsx 或者 .cshtml 文件超过600行(超过800行表示按照关注点拆分)。只是一个警告:它永远不会失败,即使在基线之外。每个文件计数。
hook:drift根 .husky/pre-commit 缺少或不同于此包提供的共享钩子(CRLF被忽略)
tracked-case:<path>一个被跟踪的文件或文件夹,它在磁盘上的名字只有字母大小写不同,在Mac上手工重命名,git从未见过;Linux签出无法找到导入。运行 git mv 信息给出。一个文件夹只报告一次。总是失败。

注释行(//, /*, *), .test. 或者 .spec. 导入检查不读取文件。

令牌规则:按文件计数

这四条规则解读了每一条轨迹 .scss, .css, .cshtml, .jsx 和 .tsx 文件,每个 .js 或者 .ts 导入的文件 react-native。它们跳过带有a的路径 node_modules, dist, generated, vendor, __tests__ 或者 __mocks__ 段,一个电子邮件模板项目文件夹(<Product>.Email 或者 <Product>.Emails电子邮件客户端读取没有CSS变量,所以需要内联像素和颜色; 一个普通 Email 文件夹的管理屏幕保持选中),路径包含 wwwroot/lib/,一个 .generated. 名字, 一个 .min.css 名称、 .test. 或者 .spec. 脚本,以及repo列表下的任何路径 generated[].paths 在 .webority/map.json (落后于 / 命名一个文件夹; * 同一段内的匹配)。列出已编译的 样式表:它捆绑了共享主题,所以它的库规则不是产品的代码 规则仍然读取构建它的SCSS。

raw-measure 计数一个非零的px, rem或em字面量,或一个纯数字的权重或前导,in 填充、边距、间隙、插入、角、字体大小、字体粗细或行高:每个发现一个 声明或样式键。一个零,一个关键字auto, bold, normal),一个令牌 (var(--wui-space-md)),百分比或其他单位,以及自定义属性或Sass变量 声明不计算在内。

raw-colour 算一个十六进制,然后 rgb(), rgba(), hsl() 或者 hsla() 带有数字参数或CSS 命名为color,在颜色属性或样式键中(包括内部的回退) var(--color-x, #fff))。 transparent, currentColor,含义读取,自定义属性或Sass变量声明,以及 中的文本 url() 或者带引号的字符串不计算在内。

root-font-size 计算每一个 font-size 或者 font 选择器为的规则中的声明 html 或者 :root (带或不带属性、类或伪类),无论其值是多少。

palette-read 计算每个 var(--wui-<step>) 每个电话 palette. 阅读,加上每个 var(--bs-<colour>), var(--bs-<colour>-rgb) 和萨斯 $<colour> Bootstrap的八个主题 颜色:每次读取一个发现,声明不是读取。

missing-canvas-key 和 repeated-canvas-key 阅读导入的每个脚本模块 react-native, @webority/mobile-ui 或者 @webority/ui-react。属性为 testID 的模块中 react-native 或者 @webority/mobile-ui, data-canvas 在任何其他地方。该项目的价差计为 键入,重复在第一个标记之后为每个标记添加一个查找结果。

src/assets/styles/_home.scss:12: color: var(--wui-primary);
  (read the meaning: var(--color-primary))

新规定以警告开始

lint, rn-mainactivity-oncreate-bundle, spa-host-immutable-assets 和 oversize 以警告形式打印,直到 REPO_CHECKS_ENFORCE 名称: REPO_CHECKS_ENFORCE=lint,rn-mainactivity-oncreate-bundle,或者 all。一个版本 当没有存储库有命中时,从警告列表中删除规则。 --json 带有下面的警告 warnings.

现有的发现是:一个只会缩小的基线

采用检查的存储库记录它今天的内容,一次:

pnpm exec webority-repo-checks --baseline-init

写 .webority/baselines/repo-checks-baseline.json,创建文件夹:依赖项发现为 "<app folder> | <id>",每个文件计算代码规则:

{
    "version": 2,
    "findings": ["apps/portal | banned:@webority/ui-elements", "samples/react-sandbox | required:@webority/web-core"],
    "counts": { "palette-read:packages/theme/scss/wui/_buttons.scss": 3, "raw-measure:src/assets/styles/_home.scss": 14 }
}

从那时起,基线中的发现被作为已知的报告,并且不会失败;还有其他发现吗? 失败(退出1)。计数可能只会下降:超过其记录计数的文件失败并打印其行, 从基线缺失的文件从0开始,因此新的或重命名的文件从0开始。修旧后 发现或降低计数, --baseline-shrink 丢弃固定的结果并将每个计数降低到 它的当前值,删除一个达到0的;它从不加1或加1。

--baseline-accept <folder> --reason <text> 记录所有者接受的债务:添加该文件夹下的每个当前发现和计数,并将计数提高到其当前值,而不会降低。只用于债权人接受的债务,并说明理由;原因被保留了下来 accepted 在基线文件中,和 --baseline-shrink 保留这个条目。

--baseline-adopt <rule,...> 记录今天的发现,并计算基线从未记录的规则,例如新版本添加的规则。它拒绝基线已经记录的规则,因此它永远不会提出一个现有条目,并命名每个规则采用了多少个发现和计数。

--baseline-init 运行一次:它拒绝现有的文件和文件夹参数。当文件为 早期形状(否) version),删除并运行 --baseline-init 从git根目录查看一次,然后查看 提交之前的困难。

--json 打印 { root, new, known, stale } 的工具;记录上面的计数出现在 new 用它的线条。

共享的预提交钩子

每个存储库都运行这个包附带的预提交钩子。从git根目录中采用一次:

pnpm exec webority-repo-checks --sync-hook

写 .husky/pre-commit,创造 .husky 当缺少时,用LF行结尾。一个 多应用程序存储库只在根目录下安装一次。赫斯基一直是安装者,通过 prepare 脚本。移除绒毛分级(pnpm remove lint-staged,并删除其配置键): 共享钩子运行Biome本身。加入仅支持回购的步骤 .husky/pre-commit.local; 共享钩子 在Biome之后运行该文件,然后 --sync-hook 永远不要碰它。

hook:drift 保持根副本等于附带的副本。

版本控制

发表于 webority-ui Monorepo和另一个人步调一致 @webority/* 包。销 精确版本;当你撞到它时,新的规则就会出现。

版本与发布记录

@webority/repo-checks 共发布 140 个版本,首次发布于 2026/10/10;过去 12 个月发布了 140 个版本。

版本发布日期距今
0.119.0latest2026/11/03今天
0.118.02026/11/03今天
0.117.02026/11/03今天
0.116.02026/11/02今天
0.115.02026/11/02今天
0.114.02026/11/02今天

关于 @webority/repo-checks 的常见问题

@webority/repo-checks 是什么?

对webbority React门户网站、React Native应用程序和Razor站点的存储库检查:禁止的和必需的依赖项,仅限pnpm,确切的pin,共享的Biome预设,以及样式、标记和组件代码中的令牌使用。在推之前跑;现有的结果

如何安装 @webority/repo-checks?

在项目目录运行 npm install @webority/repo-checks,或使用 pnpm add / yarn add / bun add。它还提供命令行工具 webority-repo-checks,可以用 npx webority-repo-checks 直接运行。

@webority/repo-checks 支持 TypeScript 吗?

该包的 package.json 没有声明类型入口。需要类型提示时,可以在 npm 上查找社区维护的 @types/webority__repo-checks 是否存在。

@webority/repo-checks 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@webority/repo-checks 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=24.15 <25。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@webority/repo-checks 可以商用吗?

@webority/repo-checks 使用 SEE LICENSE IN LICENSE 许可。许可条款写在包内的独立文件中,请阅读该文件确认可否商用。以上为概括,不构成法律意见,请以许可原文为准。

@webority/repo-checks 还在维护吗?

最新版本 0.119.0 发布于 2026/11/03(今天);至今共发布 140 个版本,其中过去 12 个月发布了 140 个;首次发布于 2026/10/10。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。