# Jazor
**Repository Path**: devhxj/Jazor
## Basic Information
- **Project Name**: Jazor
- **Description**: C# to Javascript Compiler implemented via Roslyn.
- **Primary Language**: C#
- **License**: MIT
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 1
- **Forks**: 0
- **Created**: 2026-04-08
- **Last Updated**: 2026-08-25
## Categories & Tags
**Categories**: Uncategorized
**Tags**: Csharp, roslyn
## README
> Jazor 仍处于实验阶段,公共 API 与生成产物形态可能继续演进。
Jazor 是一套将受支持 C# 语义转换为确定性 ECMAScript 模块的强类型 .NET 工具链。它的核心不依赖 Vue、React 或其他 UI 框架:Roslyn 提供语义模型,`Jazor.Compiler` 将其降低为 ESTree,`Jazor.Emit` 负责物化浏览器产物。
Razor-to-Vue 是建立在该核心之上的一个应用方向。`Jazor.RazorVue` 绑定官方 Razor Source Generator 的最终输出,再将所有 C# 表达式和成员语义交给同一套 Jazor 编译器,最后组装 Vue render-function 模块。
## 最新更新
### 2026-08-24
- **包边界变更:** `Jazor` 现在保持框架无关,可用于普通 C# -> ECMAScript 类库。Vue authoring、Razor-to-Vue、Vue runtime 资源,以及 `ECMAScript.Vue`、`ECMAScript.VueContract`、`ECMAScript.Blazor` payload 由显式的 `Jazor.Vue` 提供。
- `ECMAScript.Blazor` 首批提供 Mouse/Keyboard/Focus 事件 getter 到原生 browser carrier 的 mapping;它随 `Jazor.Vue` 交付,不随 `Jazor` 安装,实际 runtime module/helper 仍由 `Jazor.CLR` 承载。
- RazorVue 浏览器导航现支持 `NavigationManager.RegisterLocationChangingHandler(...)`、`PreventNavigation()`,以及后续导航覆盖进行中 handler 时的取消语义。
- 浏览器 runtime 增加上述异步导航路径所需的 `ValueTask` 与 cancellation API 切片。
完整版本历史见 [CHANGELOG](CHANGELOG.md)。
## 致谢
Jazor 使用了 [Roslyn](https://github.com/dotnet/roslyn)、[Acornima](https://github.com/adams85/acornima)、[Netpack](https://github.com/FlorianRappl/netpack)、[DenoHost](https://github.com/thomas3577/DenoHost)、[WebRef](https://github.com/w3c/webref),并参考了 [WootzJs](https://github.com/kswoll/WootzJs)、[h5](https://github.com/curiosity-ai/h5)、[SharpKit](https://github.com/SharpKit/SharpKit) 等早期 C# 到 JavaScript 项目。
## 核心模型
```mermaid
flowchart LR
subgraph Core["Jazor 核心平台:C# -> ECMAScript"]
CSharp["C# 模块"] --> Roslyn["Roslyn 语义模型"]
Roslyn --> Compiler["Jazor.Compiler"]
Bindings["CLR 与 ECMAScript 绑定"] --> Compiler
Compiler --> Ast["ESTree"] --> Emit["Jazor.Emit"]
Emit --> Artifacts[".mjs、源映射、manifest、bundle"]
end
subgraph Integrations["框架集成层"]
Razor["Razor 组件"] --> RazorSG["官方 Razor SG"] --> Compilation["最终 Compilation"]
Compilation --> RazorVue["Jazor.RazorVue"]
RazorVue -. 调用核心翻译钩子 .-> Compiler
RazorVue --> Emit
end
```
`Jazor.RazorVue` 是当前已实现的框架集成。未来的 `Jazor.React`、`Jazor.RazorReact` 等方向可以复用同一核心,但目前不是已支持的 API。
## 质量门槛
顶部徽标展示持续适用的验收门槛,而非会过期的单次构建结果。仓库通过可复现脚本验证以下最低要求:
- 核心编译器:至少 10,000 个通过的 `IOperation` 场景、98% 行覆盖率和 97% 分支覆盖率。
- 当前 Razor-to-Vue 集成:至少 4,000 个通过场景、90% 行覆盖率和 94% 分支覆盖率;该门槛会在集成完善后再提高。
- Vue 生态绑定:每个目标至少 90% 的已审计公共绑定契约覆盖率。
可在 `scripts/csharp/` 下运行 `verify-compiler-coverage.cs`、`verify-razorvue-coverage.cs` 或 `verify-vue-binding-coverage.cs` 复现相应门槛。当前范围与测试入口见[当前状态](docs/04-roadmap/current-status.md)。
## 包组成
| 包 | 职责 |
| --- | --- |
| `Jazor` | 框架无关的编译器、CLR 契约、分析器、emit 工具、MSBuild 与 ASP.NET Core 集成,可用于普通 ECMAScript 类库 |
| `Jazor.Vue` | Vue authoring、Razor-to-Vue opt-in、Vue runtime 资源,以及 `ECMAScript.Vue`、`ECMAScript.VueContract`、`ECMAScript.Blazor` payload |
| `ECMAScript.*` | 框架无关 ECMAScript 绑定、可选 Vue 生态绑定与 CSS-in-JS 类库 |
| `ECMAScript.VueDataUi` | `vue-data-ui` 的强类型 RazorVue 图表与按组件本地 ESM 物化 |
| `ECMAScript.VuIcons` | `vu-icons` 的强类型 RazorVue 图标,支持静态单图标与动态 catalog 路径 |
| `Jazor.Admin` | UI 库无关的管理壳库与 RazorVue 组件 |
`samples/JazorAdmin` 是消费 `Jazor.Admin` 的生产级管理参考应用,不属于该库的公共契约。
## 安装
在声明 ECMAScript 模块的每个项目中安装核心包:
```bash
dotnet add package Jazor --version 0.20.0
```
需要当前 Razor-to-Vue 集成的 Razor SDK 项目,必须显式添加 opt-in 包,并保持版本一致:
```xml
```
完整的包选择、输出设置、SSR 配置与生态绑定见[安装与配置](docs/03-guides/installation-and-configuration.md)。
## 第一个模块
使用 `[ECMAScriptModule]` 使 C# 模块进入 JavaScript 发射范围:
```csharp
using ECMAScript;
namespace MyApp;
[ECMAScriptModule("shared/greetings.mjs")]
public static class GreetingModule
{
public static string Compose(string name) => $"Hello, {name}";
}
```
核心编译器会生成标准的具名导出 ECMAScript 模块。跨模块调用由编译器维护 import,不需要手写 JavaScript。
完整的可运行路径见[快速开始](docs/03-guides/quick-start.md)。
## 输出模式
可执行项目或 Web 宿主通过 MSBuild 选择产物模式:
```xml
debug
$(MSBuildProjectDirectory)\jazor\
```
| 模式 | 结果 |
| --- | --- |
| `none` | 默认值,不写入 Jazor 产物 |
| `debug` | 可检查的模块、外部 source map 与 `jazor-manifest.json` |
| `release` | 通过内置 Netpack 路径生成生产浏览器包 |
ASP.NET Core 应用需要 Vue SSR 与 hydration 时,按支持的 SSR 配置设置 `JazorSSR=true`。详见[产物管线](docs/02-architecture/artifact-pipeline.md)。
## 文档
| 需求 | 入口 |
| --- | --- |
| 产品总览 | [docs/README.md](docs/README.md) |
| 核心编译器架构 | [编译器](docs/02-architecture/compiler.md) |
| 框架集成规则 | [框架集成层](docs/02-architecture/framework-integrations.md) |
| 当前 Razor-to-Vue 实现 | [Razor-to-Vue](docs/02-architecture/razor-to-vue.md) |
| 安装、配置与编写 | [使用指南](docs/03-guides/README.md) |
| 示例 | [示例](docs/03-guides/examples.md) |
| 当前范围 | [路线图](docs/04-roadmap/current-status.md) |
| 历史背景 | [演进记录](docs/05-history/evolution.md) |
| 版本历史 | [CHANGELOG.md](CHANGELOG.md) |
## 开发
使用 [global.json](global.json) 指定的 .NET 11 SDK preview。在仓库根目录执行:
```bash
dotnet restore Jazor.slnx
dotnet build Jazor.slnx
dotnet run --file scripts/csharp/test-dotnet.cs
```
常用聚焦测试:
```bash
dotnet test src/Jazor.CompilerTest/Jazor.CompilerTest.csproj
dotnet test src/Jazor.RazorVue.Sg.Test/Jazor.RazorVue.Sg.Test.csproj
dotnet test src/Jazor.EmitTest/Jazor.EmitTest.csproj
```
仓库自动化使用 `scripts/csharp/` 下的单文件 C# 入口。完整流程见[开发与测试](docs/03-guides/development-and-testing.md)。
## 许可证与反馈
Jazor 使用 [MIT 许可证](LICENSE.txt)。安全问题请通过 [GitHub Security Advisories](https://github.com/devhxj/Jazor/security/advisories/new) 私下报告;其他问题可使用 [Issues](https://github.com/devhxj/Jazor/issues) 或 [Discussions](https://github.com/devhxj/Jazor/discussions)。