Prettier yuku 插件完全指南:使用 yuku-parser 格式化 JavaScript 与 TypeScript 代码
Prettier yuku 插件完全指南使用 yuku-parser 格式化 JavaScript 与 TypeScript 代码【免费下载链接】prettierPrettier is an opinionated code formatter.项目地址: https://gitcode.com/gh_mirrors/pr/prettierprettier/plugin-yuku是 Prettier 官方仓库中提供的一个实验性插件包它让 Prettier 可以借助 Rust 编写的 yuku 解析器来解析并格式化 JavaScript / TypeScript 代码。本指南将带你完成该插件的安装与两种配置方式全局启用与按文件类型定向启用并结合仓库源码剖析其 parser 命名、AST 格式与解析回退机制让你在项目中能独立、稳妥地接入这套格式化方案。插件是什么从 plugin-yuku 的包描述 可以看到该包名为prettier/plugin-yuku当前仓库内版本为 0.0.2类型为 ESMtype: module并声明了sideEffects: false说明它不携带副作用可以安全地被打包器摇树优化。它的核心作用只有一个为 Prettier 注册yuku 解析器。yuku 是一个独立的 JavaScript / TypeScript 解析器yuku-parserRust 实现该插件将其接入 Prettier 的插件体系从而让 Prettier 能够用 yuku 生成的 AST 来排版代码。从插件入口 packages/plugin-yuku/index.js 可以看到它导出了四部分内容parsers注册yuku与yuku-ts两个解析器并将它们的 AST 格式astFormat统一改写为estree-yukuprinters将estree-yuku格式的 AST 交给 Prettier 内置的 estree 打印器estree printer完成输出options直接复用 src/language-js/options.js 中 JavaScript 语言的整套格式化选项languages语言声明信息见下文“语言映射”一节。简言之yuku 插件 yuku 解析器 estree 打印器它把“解析”这一步替换成了 yuku而“打印”仍然复用 Prettier 最成熟的 estree 管线。安装插件在项目中使用 yarn 安装建议配合--exact锁定精确版本避免解析器与打印器之间的行为漂移yarn add --dev --exact prettier prettier/plugin-yuku版本要求该插件要求prettier 3.6.0README 中有明确标注。在 3.6.0 之前的 Prettier 版本上加载此插件可能导致插件 API 不兼容而无法正常工作。如果你使用 npm 或 pnpm也可以等价地安装npm install --save-dev --save-exact prettier prettier/plugin-yuku基础用法全局启用插件创建或修改你的 Prettier 配置文件如prettier.config.mjs将插件加入plugins数组即可。此时 yuku 会作为内置的 babel / typescript 解析器的替代实现参与格式化// prettier.config.mjs import * as prettierPluginYuku from prettier/plugin-yuku; /** * see https://prettier.io/docs/configuration * type {import(prettier).Config} */ const config { plugins: [prettierPluginYuku], }; export default config;启用后Prettier 在格式化.js、.jsx、.ts、.tsx等文件时会自动优先使用该插件注册的 yuku 解析器具体替换关系见下文“语言映射”。进阶用法按文件类型显式指定 parser如果希望精确控制哪些文件走 yuku 解析器而不是让插件接管所有 JS/TS 文件可以通过overrides显式指定// prettier.config.mjs import * as prettierPluginYuku from prettier/plugin-yuku; /** * see https://prettier.io/docs/configuration * type {import(prettier).Config} */ const config { overrides: [ { files: [**/*.{js,mjs,cjs,jsx}], options: { parser: yuku, plugins: [prettierPluginYuku], }, }, { files: [**/*.{ts,mts,cts,tsx}], options: { parser: yuku-ts, plugins: [prettierPluginYuku], }, }, ], }; export default config;这里两个 parser 的定位非常清晰parser 名称适用文件解析语言模式yuku.js/.mjs/.cjs/.jsxJS含 JSXyuku-ts.ts/.mts/.cts/.tsxTypeScript含 TSX / d.ts采用显式overrides的好处是可以将 yuku 解析器限定在指定扩展名范围内其余语言如 JSON、CSS、Markdown仍然交给各自的默认 parser互不干扰。解析器内部实现yuku 与 yuku-ts插件注册的两个 parser 实际来自 Prettier 源码中的 src/language-js/parse/yuku.js。该文件是yuku-parser在 Prettier 内部的适配层值得关注的细节包括JS 解析yuku调用yukuParse(text, { ... })时强制使用lang: jsx模式并会根据文件路径推断sourceTypemodule / script当无法确定 sourceType 时通过tryCombinationsSync依次尝试多种组合直到解析成功。TS 解析yuku-ts先根据文件路径与文本内容决定语言模式.d.ts文件固定用dts.tsx场景优先tsx其余情况用正则探测文本中是否包含 JSX 语法然后按[ts, tsx, dts]或[tsx, ts, dts]的顺序组合尝试解析见 getLanguageCombinations。解析选项parseWithOptions固定传入preserveParens: true保留括号、semanticErrors: false忽略语义错误、attachComments: false、tokens: false见 parseWithOptions随后将解析器产出的diagnostics转换为 Prettier 风格的行列号错误信息。注释处理解析完成后把comments挂到 AST 的program节点上再交给postprocess做后续归一化postprocess使其符合 Prettier estree 管线的预期。元数据parser 通过 createParser 统一补齐hasPragma、hasIgnorePragma、locStart、locEnd等字段保证/** format */pragma 与// prettier-ignore注释的行为与内置解析器一致。AST 格式与打印estree-yuku插件入口 packages/plugin-yuku/index.js 中定义了const AST_FORMAT estree-yuku;它将两个 parser 的astFormat统一改写为estree-yuku随后在printers中把该格式映射到 estree 打印器export const printers { [AST_FORMAT]: estreePrinter, };这意味着 yuku 解析出的 AST 只负责“读懂代码”最终输出排版仍然由 Prettier 经过长期打磨的 estree 打印器 完成。因此格式化风格缩进、引号、分号等与使用 babel / typescript 解析器时保持高度一致差异主要体现在解析行为本身。语言映射内置 JS 语言的替换插件导出的 languages.evaluate.js 对 Prettier 内置的 JavaScript 语言声明做了替换将原本挂在 babel / typescript 解析器上的语言条目改写为 yuku / yuku-tsconst replacements new Map([ [babel, yuku], [typescript, yuku-ts], ]);即凡是由 babel 解析的 JS 语言声明改用yuku由 typescript 解析的改用yuku-ts解析器列表为空的语言条目则被过滤掉。这也是“全局启用插件即可自动接管 JS/TS 文件”的原理所在。另外从 development-plugins.js 可以看出yuku与yuku-ts同时被列入 Prettier 内置的开发插件 parser 白名单中说明该解析器在仓库内部与 oxc、hermes 等解析器一样被作为可供切换的备选解析方案维护。适用范围与注意事项仅覆盖 JavaScript 系语言该插件只注册 JS / TS 相关的 parserJSON、CSS、HTML、Markdown、YAML 等语言不受影响仍走各自的默认 parser。Prettier 版本门槛需要prettier 3.6.0请先升级 Prettier 再引入插件。ESM 包插件是纯 ESM 模块type: module在 CommonJS 项目中需要用动态import()或prettier.config.mjs这类 ESM 配置文件来加载。解析器行为差异yuku 是 Rust 实现的解析器与 babel / typescript 在个别语法边界情况下的容错行为可能不同若遇到解析差异可通过overrides将特定文件退回默认 parser。实验性质该包版本号仍为 0.0.x属于早期阶段接入生产项目前建议先在目标代码库上做一轮格式差异验证。小结prettier/plugin-yuku提供了一条“以 yuku 解析、以 estree 打印”的轻量接入路径安装一条命令、配置两个 parseryuku/yuku-ts即可让 Prettier 使用 Rust 实现的解析器格式化 JS 与 TS 代码。理解其 AST 格式estree-yuku、语言映射与版本约束后你就能在项目中灵活选择全局启用或按文件类型定向启用并在必要时安全回退到默认解析器。【免费下载链接】prettierPrettier is an opinionated code formatter.项目地址: https://gitcode.com/gh_mirrors/pr/prettier创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

CANN Runtime 错误回调与异常诊断实战:基于 2_callback_exception 样例构建完整错误处理链

CANN Runtime 错误回调与异常诊断实战:基于 2_callback_exception 样例构建完整错误处理链

CANN Runtime 错误回调与异常诊断实战:基于 2_callback_exception 样例构建完整错误处理链 【免费下载链接】runtime 本项目提供CANN运行时组件和维测功能组件。 项目地址: https://gitcode.com/cann/runtime 本文以 CANN / runtime 仓库中的 2_callback_exc…

2026/9/19 0:54:02 阅读更多 →
CANN ops-transformer 中 aclnnFlashAttentionVarLenScoreV2 接口实战:基于 TND 排布的可变长 FlashAttention 训练加速

CANN ops-transformer 中 aclnnFlashAttentionVarLenScoreV2 接口实战:基于 TND 排布的可变长 FlashAttention 训练加速

CANN ops-transformer 中 aclnnFlashAttentionVarLenScoreV2 接口实战:基于 TND 排布的可变长 FlashAttention 训练加速 【免费下载链接】ops-transformer 本项目是CANN提供的transformer类大模型算子库,实现网络在NPU上加速计算。 项目地址: https://…

2026/9/19 0:54:02 阅读更多 →
PyCharm 2023社区版安装与Python环境搭建新手避坑指南

PyCharm 2023社区版安装与Python环境搭建新手避坑指南

很多刚接触 Python 的朋友,第一次被劝退往往不是语法写不明白,而是倒在了装环境这一步。明明照着视频一步步点,结果 PyCharm 打开之后满屏英文,新建项目时弹出一堆看不懂的选项,折腾半天连第一行print("hello&quo…

2026/9/20 2:12:39 阅读更多 →

最新新闻

GetQzonehistory:一键导出QQ空间全部历史说说,Excel和网页版一次拿全

GetQzonehistory:一键导出QQ空间全部历史说说,Excel和网页版一次拿全

GetQzonehistory:一键导出QQ空间全部历史说说,Excel和网页版一次拿全 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 想找两年前发的某条说说,空间首…

2026/9/20 2:57:08 阅读更多 →
Docker实战指南:镜像容器、数据卷与MySQL Redis主从部署

Docker实战指南:镜像容器、数据卷与MySQL Redis主从部署

说句实在话,Docker这个东西,没接触之前你觉得它是个很玄乎的玩意儿,什么容器、镜像、编排,名词一串一串的,接触到用起来之后你会发现,它本质上就是一套“把应用连同运行环境一起打包、一键分发启动”的方案…

2026/9/20 2:57:08 阅读更多 →
ESP32-P4 USB读卡器开发实战:TinyUSB MSC与SD卡对接

ESP32-P4 USB读卡器开发实战:TinyUSB MSC与SD卡对接

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/20 2:57:08 阅读更多 →
TiXL 高级反馈效果 AdvancedFeedback 全解析:基于位移、模糊与边缘检测的实时图像反馈合成器

TiXL 高级反馈效果 AdvancedFeedback 全解析:基于位移、模糊与边缘检测的实时图像反馈合成器

音视频图形学桌面应用 【免费下载链接】t3 TiXL is an open source software to create realtime motion graphics. 项目地址: https://gitcode.com/GitHub_Trending/t3/t3 点击查看 免费下载 AdvancedFeedback 是 TiXL 算子库 Lib.image.fx.feedback 中的核心反馈…

2026/9/20 2:57:08 阅读更多 →
OpenResearch orx-git 技能实战:用 Git worktree 与 orx/<slug> 分支管理实验代码的版本与不可变历史

OpenResearch orx-git 技能实战:用 Git worktree 与 orx/<slug> 分支管理实验代码的版本与不可变历史

人工智能AI Agent深度研究自主智能体Agent 编排 【免费下载链接】OpenResearch Turn your coding agents into research agents 项目地址: https://gitcode.com/GitHub_Trending/op/OpenResearch 点击查看 免费下载 OpenResearch(orx)把 Git…

2026/9/20 2:57:08 阅读更多 →
切线判定到射影定理:16题几何证明链与批量核验

切线判定到射影定理:16题几何证明链与批量核验

简介:《相似三角形和圆综合题》教师版练习文档面向初中高年级及中考数学备考学生与教师,集中训练圆与相似三角形的综合证明与计算。文档收录16道典型几何题,覆盖切线判定、直径与弦的关系、圆周角与弦切角、角平分线与垂线、比例线段、勾股定…

2026/9/20 2:56:08 阅读更多 →

日新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/20 0:00:46 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/20 0:00:46 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/20 0:00:46 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/20 0:00:46 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/20 0:00:46 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/20 0:00:46 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/19 23:01:36 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/19 17:50:38 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/19 23:35:34 阅读更多 →