# @basenative/validate 中文文档

规范地址：https://npmcn.com/package/%40basenative/validate/

版本：3\.0\.0
npm 元数据更新时间：2026-10-31T13:47:00.166Z
中文译文更新时间：2026-10-31T16:47:27.467Z
软件包许可：Apache-2\.0

本文由上游 README 机器翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40basenative/validate
原文对照：https://npmcn.com/package/%40basenative/validate/?lang=original
项目主页：https://github.com/DuganLabs/BaseNative/tree/main/packages/validate#readme
源码仓库：https://github.com/DuganLabs/BaseNative

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：46.9 kB，10 个文件
- 模块格式：ES Module
- TypeScript 类型：包内自带
- 运行依赖：1 个
- 首次发布：2026-10-18T05:29:44.325Z
- 最新版本发布：2026-10-31T13:46:59.833Z
- 已发布版本数：11（近 12 个月 11 个）

## 中文简介

BaseNative模板的结构化验证——模型可以仅从错误对象修复机器可操作的错误

## 安装

```sh
npm install @basenative/validate
```

也可以使用：`pnpm add @basenative/validate`、`yarn add @basenative/validate`、`bun add @basenative/validate`

## README

# @basenative /验证

BaseNative模板的结构化验证。每一个诊断都被设计成 **可由模型单独从错误对象修复，无需访问文档。**

```js
import { validateTemplate } from '@basenative/validate';

validateTemplate('<div v-if="isAdmin">…</div>');
// {
//   valid: false,
//   diagnostics: [{
//     code: 'BN_E_FOREIGN_DIRECTIVE',
//     severity: 'error',
//     message: '"v-if" is Vue syntax; BaseNative does not support it — BaseNative puts
//               conditionals on a <template>, not on the element itself',
//     suggestion: '<template @if="isAdmin">',
//     span: { line: 1, col: 6 },
//     confidence: 'high'
//   }]
// }
```

通过一项 `context` 也可以查看参考资料：

```js
validateTemplate('<p>{{ itmes }}</p>', { context: { items: [] } });
// → BN_E_UNBOUND_REF, suggestion: 'Did you mean "items"? …'
```

## 为什么存在这个

BaseNative的语法是四个生态系统的混合体： `{{ }}` 从Vue /角, `@for="item of items; track item.id"` 几乎和Angular 17一字不差， `:disabled` 从Vue, `signal()`/`computed()`/`effect()` 从固体。这种熟悉使 非常 _可读的_ -并使失效模式 **自信回归 最近的邻居**． 负载下的模型发出 `v-if`，或者Angular的块形式，或者 `$state`，而不是发明一些新奇的东西。

阅读不是写作。这个包衡量了差异。

## 诊断代码

| 代码 | 严重程度 | 捕获 |
| --- | --- | --- |
| `BN_E_FOREIGN_DIRECTIVE` | 错误 | Vue / Angular / Svelte / Alpine语法，以及等效的BaseNative |
| `BN_E_CONTROL_FLOW_ON_ELEMENT` | 错误 | `@if`/`@for`/`@switch` 在一个非——`<template>` 元素 |
| `BN_E_UNKNOWN_DIRECTIVE` | 错误 | 一个 `@`\-directive BaseNative没有定义 |
| `BN_E_EXPR_UNSUPPORTED` | 错误 | 表达式在csp安全子集之外，或阻塞原型访问 |
| `BN_E_MALFORMED_FOR` | 错误/警告 | `@for` 不匹配 `item of items`;失踪 `track` 警告 |
| `BN_E_ORPHAN_BRANCH` | 错误 | `@else`/`@empty`/`@case`/`@default` 没有管理指令 |
| `BN_E_UNBOUND_REF` | 警告 | 所提供上下文中缺少的引用 |

### `BN_E_CONTROL_FLOW_ON_ELEMENT` 是最重要的吗

在一个 `<template>`， `@if` 是控制流。在任何其他元素上， **每一个 `@name` 属性注册为事件侦听器**。所以 `<div @if="admin">` 默默地 结合一个 `"if"` 事件，并且永远不会有条件地呈现-在 所有人。这是语言中一个完全看不见的错误 静态验证。

## 严重的合同

`valid` 是 `false` 只有当至少一个 `error`\-严重性诊断存在。

验证器永远不会将运行时接受的内容报告为错误。 `@for` 没有 `track` 呈现罚款（它丧失了键控和解），所以它宁可发出警告 它失败了——一个验证器不同意它所验证的东西是比它更糟糕的 没有验证器。

## 设计说明

表达式检查导入 `compileExpression` 从 `@basenative/runtime/shared/expression` - - - _与求值器使用的解析器相同_. 第二个独立的表达式解析器将偏离运行时，即 这正是这个包存在的目的。

标记扫描器故意不是DOM解析器：DOM解析器丢弃字节 偏移、规范化大小写，并静默地修复错误的标记 这正是我们要抱怨的。

## 许可证

apache - 2.0

## 常见问题

### @basenative/validate 是什么？

BaseNative模板的结构化验证——模型可以仅从错误对象修复机器可操作的错误

### 如何安装 @basenative/validate？

在项目目录运行 npm install @basenative/validate，或使用 pnpm add / yarn add / bun add。

### @basenative/validate 支持 TypeScript 吗？

支持。包内自带 TypeScript 类型声明（package\.json 声明了 types 入口），安装后即可获得类型提示，无需再安装 @types 包。

### @basenative/validate 支持 ESM 还是 CommonJS？

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

### @basenative/validate 可以商用吗？

@basenative/validate 使用 Apache-2\.0 许可。宽松许可：允许商业使用、修改和再分发，并附带明确的专利授权；分发时需保留许可与 NOTICE 文件，修改过的文件要注明改动。以上为概括，不构成法律意见，请以许可原文为准。

### @basenative/validate 还在维护吗？

最新版本 3\.0\.0 发布于 2026/10/31（2 天前）；至今共发布 11 个版本，其中过去 12 个月发布了 11 个；首次发布于 2026/10/18。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

