惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - Franky
W
WeLiveSecurity
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
N
News and Events Feed by Topic
Recent Commits to openclaw:main
Recent Commits to openclaw:main
S
Security Affairs
SecWiki News
SecWiki News
T
Tenable Blog
C
CERT Recently Published Vulnerability Notes
Forbes - Security
Forbes - Security
Google Online Security Blog
Google Online Security Blog
C
Cybersecurity and Infrastructure Security Agency CISA
L
LINUX DO - 热门话题
T
Threat Research - Cisco Blogs
C
Cyber Attacks, Cyber Crime and Cyber Security
Cisco Talos Blog
Cisco Talos Blog
PCI Perspectives
PCI Perspectives
Engineering at Meta
Engineering at Meta
博客园 - 聂微东
Cyberwarzone
Cyberwarzone
Hugging Face - Blog
Hugging Face - Blog
Microsoft Azure Blog
Microsoft Azure Blog
V
Vulnerabilities – Threatpost
宝玉的分享
宝玉的分享
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Vercel News
Vercel News
V
Visual Studio Blog
T
Threatpost
Project Zero
Project Zero
Know Your Adversary
Know Your Adversary
I
InfoQ
G
Google Developers Blog
博客园 - 【当耐特】
Google DeepMind News
Google DeepMind News
T
The Blog of Author Tim Ferriss
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
TaoSecurity Blog
TaoSecurity Blog
O
OpenAI News
博客园_首页
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
T
Tor Project blog
Schneier on Security
Schneier on Security
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
博客园 - 三生石上(FineUI控件)
D
DataBreaches.Net
Security Latest
Security Latest
Attack and Defense Labs
Attack and Defense Labs
aimingoo的专栏
aimingoo的专栏
H
Heimdal Security Blog

Ray's Blog

Ray's Blog Ray's Blog Ray's Blog Ray's Blog Ray's Blog Ray's Blog Ray's Blog Ray's Blog Ray's Blog Ray's Blog Ray's Blog Ray's Blog Ray's Blog Ray's Blog Ray's Blog Ray's Blog
Ray's Blog
i@mk1.io (Ra · 2024-01-19 · via Ray's Blog

Vue Language Tools 深度解析 (1):Vue 编辑器插件发展历程及基本工作原理

Vue Language Tools 深度解析 (1):Vue 编辑器插件发展历程及基本工作原理

作为一门独立的模板语言,编写 Vue SFC 时必不可少的就是像 TSX 一样的自动补全、错误提示等功能。而这些功能的实现离不开编辑器插件与语言服务器。自 Vue 诞生以来,有三个项目为 Vue 提供了语言功能 Vetur,VueDX 和本系列的主角 Vue Language Tools。本文将从历史的角度出发,介绍这三个项目的发展历程,以及 Vue Language Tools 的基本工作原理。

Vetur 在发布之初实际上并没有提供 <template> 块中的 JavaScript 语言功能,而是仅仅提供了 HTML 的补全。Katashin 提出了一个 issue,希望能够在 <template> 块中提供 JavaScript 的补全。Katashin 后来自己实现了一个简单的类型检查器 (原文),不过由于它没有复用 TypeScript 的类型检查器,所以它的功能非常有限。后来海老师提出了一个思路,即将 <template> 转换为等价的 TypeScript,然后让 TypeScript 的类型检查器来检查它,最后通过 SourceMap 将自动补全、错误提示等功能映射回 <template>。这个思路最终被采纳,也成为了日后所有 Vue 语言工具的基本工作原理。

Vetur 使用 vue-eslint-parser (eslint-plugin-vue 用的那个) 作为 SFC 解析器,然后遍历 <template> 中的 AST 节点,同时生成等价的 TS 代码 (称为 Virtual Code,虚拟代码)。Vetur 这里的代码生成用的是 TypeScript 的 API。具体的工作原理请见 Pine 的文章

VueDX 没有 Vetur 那么出名,不过两者的工作方式大致相同。VueDX 手写了一个轻量级的 SFC 解析器,然后将 <template> 转换为 TSX 代码,最后映射回 <template>。VueDX 的代码生成用的是 @vue/compiler-dom 的 API。

上面提到的两者都手写了 SourceMap 映射