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

推荐订阅源

V
Visual Studio Blog
爱范儿
爱范儿
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
雷峰网
雷峰网
V
V2EX
博客园_首页
Engineering at Meta
Engineering at Meta
博客园 - 聂微东
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Apple Machine Learning Research
Apple Machine Learning Research
GbyAI
GbyAI
H
Help Net Security
A
About on SuperTechFans
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Blog — PlanetScale
Blog — PlanetScale
W
WeLiveSecurity
云风的 BLOG
云风的 BLOG
D
Docker
Security Archives - TechRepublic
Security Archives - TechRepublic
Help Net Security
Help Net Security
N
News and Events Feed by Topic
Simon Willison's Weblog
Simon Willison's Weblog
G
Google Developers Blog
A
Arctic Wolf
T
The Blog of Author Tim Ferriss
博客园 - 叶小钗
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Google DeepMind News
Google DeepMind News
博客园 - 三生石上(FineUI控件)
aimingoo的专栏
aimingoo的专栏
Hacker News: Ask HN
Hacker News: Ask HN
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
博客园 - 司徒正美
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
P
Privacy International News Feed
T
Troy Hunt's Blog
T
Tenable Blog
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Recorded Future
Recorded Future
F
Fortinet All Blogs
D
DataBreaches.Net
B
Blog
T
Threat Research - Cisco Blogs
MyScale Blog
MyScale Blog
Hacker News - Newest:
Hacker News - Newest: "LLM"
The GitHub Blog
The GitHub Blog
Security Latest
Security Latest
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 映射