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

推荐订阅源

雷峰网
雷峰网
N
Netflix TechBlog - Medium
博客园_首页
J
Java Code Geeks
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Y
Y Combinator Blog
腾讯CDC
V
V2EX
Microsoft Security Blog
Microsoft Security Blog
大猫的无限游戏
大猫的无限游戏
Cyberwarzone
Cyberwarzone
N
News and Events Feed by Topic
L
LINUX DO - 最新话题
Schneier on Security
Schneier on Security
Microsoft Azure Blog
Microsoft Azure Blog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Hacker News: Ask HN
Hacker News: Ask HN
Martin Fowler
Martin Fowler
Google DeepMind News
Google DeepMind News
G
Google Developers Blog
U
Unit 42
WordPress大学
WordPress大学
N
News and Events Feed by Topic
S
Schneier on Security
T
The Blog of Author Tim Ferriss
B
Blog
博客园 - 叶小钗
Forbes - Security
Forbes - Security
F
Fortinet All Blogs
Project Zero
Project Zero
K
Kaspersky official blog
Apple Machine Learning Research
Apple Machine Learning Research
L
LINUX DO - 热门话题
The GitHub Blog
The GitHub Blog
H
Hacker News: Front Page
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
PCI Perspectives
PCI Perspectives
The Register - Security
The Register - Security
www.infosecurity-magazine.com
www.infosecurity-magazine.com
W
WeLiveSecurity
C
Cyber Attacks, Cyber Crime and Cyber Security
罗磊的独立博客
S
Security @ Cisco Blogs
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
T
Tailwind CSS Blog
P
Proofpoint News Feed
S
SegmentFault 最新的问题
D
Docker
量子位
M
MIT News - Artificial intelligence

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 映射