{\fn华文楷体\fs20\bord1\shad1\1che0e0e0\2ch000000}相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相相去相去相去相去相去相去相去相去相去相去相去相去相相去相去相去相去相
A 类 类型脚本 7 内容映射器 vue 单文件
组件,用 Rust 写出。 带着它, tsc (第7.1页+, tsgo() 类型检查 .vue 文件
本地化:映射器将每个 SFC 转换成虚拟类型Script 文件并加跨度映射
编译器报告在 .vue 来源.
虚拟代码生成是一个端口 @vue/language-core
(v4内容-马普分行, vuejs/语言工具# 6170, (中文(简体) ),
与检查语义 vue-tsc 3.3 两种不同者,请参看TypeScript 6
与 vue- tsc 相比) (中文(简体) ). 通用: TypeScript 中的任何 Vue 3 项目
或 JavaScript, 它检查一个工程的一小部分 vue-tsc时间和记忆.
使用量
安装 TypeScript 7.1 和映射器( macOS 和 Linux、 x64 和 arm64 的预建二进制),以及 Windows x64在软件包中:
npm i -D [email protected] @chatium/vue-ts-mapper-rs
登记在册 tsconfig.json数字 :
{
"compilerOptions": { "strict": true, "noEmit": true },
"include": ["src/**/*.ts", "src/**/*.vue"],
"contentMappers": [
{
"package": "@chatium/vue-ts-mapper-rs",
"extensions": [".vue"],
// only for CLI checks: skips the editor-feature flags of the mappings
"options": { "languageFeatures": false }
}
]
}
并启用外部代码运行编译器 :
npx tsc --runExternalCode --noEmit
没有触摸到Tsconfig
vue-tsgo 在已存在的 tsconfig (它) 上运行已注册的地图编译器
从临时目录中扩展它,因为 TypeScript 解析来自
tsconfig的位置). 不需要在项目中安装 :
npm exec --yes \
[email protected] \
--package=@chatium/vue-ts-mapper-rs \
-- vue-tsgo --noEmit
vue-tsgo 运行其中第一个安装在机器上的结构:
tsrs (TypeScript 7的Rust端口,最快,最快)
最小的内存: 在我们的Vue项目上,比 typescript 七分半的记忆,
@chatium/tsc-rs (另一个Rust口),那么
typescript。 。 。 . VUE_TSGO_TSC=tsc-rs 开始于 @chatium/tsc-rs, (中文(简体) ), VUE_TSGO_TSC=typescript 运行
typescript数字 :
npm exec --yes --package=tsrs --package=@chatium/vue-ts-mapper-rs -- vue-tsgo --noEmit
VUE_TSGO_MAX_MEMORY=<size> (例如 1G 或者说 1500M保留 tsrs 接近这个记忆: 结束
这, tsrs 退出文件之间的最大检查器( q)--maxMemory),下至16 MB的跳棋
(单位:千美元)TSRS_RETIRE_MIN,除非设置). 在我们最大的Vue项目上 1G 将峰值降低四分之一至一
第三个大约相同的速度;解析出的程序本身是地板. @chatium/tsc-rs 财务报告和审定财务报表
typescript 别管它.
vue-tsgo 选择 tsc (单位:千美元)-p 选择tsconfig, ./tsconfig.json (默认情况下).
一个使用 tsconfig 的 ${configDir} 或相对 types 条目根据此进行解析
临时目录; 在 tsconfig 中注册映射器.
选项
地图员的条目 options 选择 Vue 编译器选项 @vue/language-core (单位:千美元)target, (中文(简体) ),
lib, (中文(简体) ), strictTemplates, (中文(简体) ), checkUnknownProps, (中文(简体) ), strictCssModules, (中文(简体) ), fallthroughAttributes, (中文(简体) ),
dataAttributes, (中文(简体) ), macros平地而不是筑起巢穴 vueCompilerOptions。 。 。 .
vueCompilerOptions 图形 extends 链条也读取(在条目选项下),作为
每个文件 <!-- @key value --> 评论. target 默认为版本
node_modules/vue 并回到最新的.
一样 vue-tsc 3.3,模板默认为宽大:倒转属性,未知事件,
允许指令和组件 v-model 未检查事件 .
strictTemplates: true 打开 checkUnknownProps, (中文(简体) ), checkUnknownEvents, (中文(简体) ),
checkUnknownDirectives, (中文(简体) ), checkUnknownComponents 财务报告和审定财务报表 strictVModel (各可自设.
不支持: Vue 语言插件(plugins,例如Pug或Markdown模板)是 JavaScript 和
未装入; a <template lang="pug"> 未选中, 如没有插件.
与 vue- tsc 相比
已核对 vue-tsc 3.3.12和3.3.11 (文字版 6.0.3),通过类型检查整个项目
并按文件、位置和代码对诊断进行分解:12个生产工作空间(XQ11 000 SFC)
和8个开源项目(vitesse、vue-pure-admin、vitepress及其文件、幻灯片、,
元素加,光环,克提亚。 在开源的上,除项目外,输出是相同的
以下;无 vue-tsc 诊断被映射器对生成代码的压制所隐藏(检查)
通过重运行 VUE_TS_MAPPER_KEEP_UNMAPPED=1) (中文(简体) ).
有什么不同,为什么:
- JS组件被打入. 与
allowJs: false, (中文(简体) ),vue-tsc输入.vue文件 带有 Java 脚本<script>作为any并在进口时报告TS7016。 TypeScript 7 类型, 因此检查这些组件的道具、事件和插槽(错误道具类型,null转至 (单位:千美元)Numberprop,.)和TS7016 以及后续隐含 -any错误已去. - 类型脚本 7 本身输入
.ts财务报告和审定财务报表.vue相同:报告超载错误(TS2769) 参数而不是调用(所以// @ts-ignore上面两行不再覆盖它, 消息更具体(TS2552"你的意思是",TS2741而不是TS2345),解构 也许..undefined值报告(TS2488),一个物体的第一个多余属性 文字按照源顺序, JS 风格Fn.prototype = { … }内.ts文件不再类型this,以及TuplifyUnion- 风格的递归型可以击中TS5114. vue-tsc未复制的假阳性: 从生成代码开始的错误vue-tscdrops(它错过了例如模板中导入函数的错误参数计数),.value用于缩小位置的函数/类/enum/导入(3.3.12), 内部参考文献v-if="false"块,失去附件的收缩v-ifs, (中文(简体) ),v-for插槽后丢失的变量(3.3.12),明确import { defineProps } from 'vue'(TS2440, 3.3.11),以及生成代码中的语法错误vue-tsc隐藏( 空)@submit.prevent="", (中文(简体) ),v-model="x as T",在<template v-else">)是有效的代码 或此处属性的普通错误.- 打开脚本 (缺失)
}结尾<script setup>页:1 脚本vue-tsc没有报告.
代码来源于 vuejs/ 语言工具 # 6170 at e75a638e (有
tools/reference/language-tools.patch);快照
内 tests/fixtures 记录它现在偏离该参考之处.
业绩
vue-tsc --noEmit (3.3.12, TypeScript 6.0.3) 反对 tsc --runExternalCode --noEmit
(TypeScript 7.1.0-dev.20261003.1) 与这台地图机,在苹果M系列笔记本电脑上(墙上时间,最高峰)
进程树的内存 :
| 项目 | 章鱼 | 风切变 | 类型脚本 7 + vue- ts- mapper- rs |
|---|---|---|---|
| 生产工作空间 | 3 571个 | 130 s, 13.0 GB (英语) | 9.3 s, 6.5 GB (英语) |
| 生产工作空间 | 2 901个 | 65 s, 7.2 GB (英语) | 5.5 s, 4.0 GB 键 |
| 生产工作空间 | 2 725个 | 105 s, 11.3 GB (英语) | 7.9 s, 5.8 GB (英语) |
| 生产工作空间 | 1 931 (中文(简体) ) | 124 s, 12.3 GB (英语) | 11.6 s, 6.7 GB 键 |
| 生产工作空间 | 903号 | 39 s, 3.4 GB (英语) | 3.8 s, 2.4 GB 键 |
| 光环( 控制台) | 296号 | 8.5 s, 1.1 GB (英语) | 1.1 s, 0. 8 GB 键 |
| 纯日出 | 255 (英语) | 13.6 s, 1.6 GB (英语) | 1.6 s, 1.1 GB (英语) |
| 元素加数 | 164 (韩语) | 11.0 s, 1.3 GB (英语) | 1.9 s, 1.0 GB 键 |
| gitea (网络) | 第23条 | 6.5 s, 1.1 GB 键 | 1.1 s, 0. 8 GB 键 |
映射程序本身最高峰为100–300 MB;其余为编译器. 单枪匹马的地图员 在一个核心(平均13个KB,每个SFC+1 ms)和尺度上,每秒变换约1 000个SFC 穿过核心.
如何运作
- SFC 和模板解析数字 : 聊天室/声优-sfc-swc, (中文(简体) ),
a 字节-同声的Rust端口
@vue/compiler-core编号 :@vue/compiler-sfc3.5.38 (英语). - 脚本分析数字 : 缩写 剖析
<script>块和模板表达式; 行走者复制语言核心从 TypeScript 的 AST 读取的内容( 键入位置, 引导) 评论、具有约束力的名称及其范围). - 代码: 转写语言核心生成器(
codegen/{script,template,style}(中文(简体) ) 写入带有相同特性解析的段缓冲器,将符号和注释合并 指令(@vue-ignore, (中文(简体) ),@vue-expect-error, (中文(简体) ),@vue-skip, (中文(简体) ),@vue-generic) (中文(简体) ). - 绘图:Volar映射,然后内容映射者横幅映射和诊断 指令,在UTF-16中按协议要求全部冲抵.
- 议定书数字 :
Content-Length- JSON-RPC在结构上initialize, (中文(简体) ),openProject, (中文(简体) ),closeProject, (中文(简体) ),transform);变换运行在线状池上.
发展
cargo test --release # unit tests + snapshots of the language-tools fixtures
UPDATE_FIXTURES=1 cargo test --release --test conformance # rewrite the snapshots
cargo run --release --example bench -- files.txt 8
cargo run --release --example syntax_scan -- a.vue b.vue … # SFCs whose virtual code does not parse
cargo run --release --example dump_one -- a.vue [needle] # virtual code, or mappings around a needle
有效的 SFC 的虚拟代码必须解析: TypeScript 报告语法错误, 不论大小 地图员的指示,而单一则停止对整个程序的语义检查.
与任何一组编码的参考码进行对比 .vue 文件, 构建一次
(单位:千美元)tools/reference/build.sh,需要节点和网络),倾销其输出和diff:
node tools/reference/dump.cjs files.txt > ref.jsonl
cargo run --release --example conformance -- ref.jsonl --out /tmp/diffs
许可证
麻省理工学院. 由vuejs/语言工具(麻省理工学院, Johnson Chu);见 自由主义。 。 。 .