typescript-eslint 如何用 TSESTREE_SINGLE_RUN 环境变量控制单次运行推断以优化 CI 速度?
typescript-eslint 如何用 TSESTREE_SINGLE_RUN 环境变量控制单次运行推断以优化 CI 速度【免费下载链接】typescript-eslint:sparkles: Monorepo for all the tooling which enables ESLint to support TypeScript项目地址: https://gitcode.com/GitHub_Trending/ty/typescript-eslint在 CI 中跑类型感知 lintingparserOptions.project或projectService时lint 耗时往往接近一次完整类型检查。typescript-eslint 为此内置了单次运行single run模式当它判断本次 ESLint 调用是一次性的 CLI 运行而不是--fix循环或编辑器这类长驻会话时会跳过为长驻场景准备的 TypeScript Watch Program 管理改为一次性创建不可变 Program并让缓存永久驻留。TSESTREE_SINGLE_RUN环境变量就是用来显式开启或关闭这一推断的手柄官方文档说明自动推断被允许时CI 中的 lint 速度最多可提升 10-20%见 Parser 文档。单次运行模式做了什么按 Parser 文档 的描述这一区分对性能的意义在于管理长驻场景所需的 Watch Program 开销显著而假定单次运行场景后typescript-eslint 可以改用更快的不可变 Program。具体到行为使用project时single run 模式下 Program 会按项目一次性创建并缓存复用而不是走 Watch Program参见 parser 实现 中Detected single-run/CLI usage, creating Program once ahead of time for project的日志分支以及 single run 测试 断言每个 tsconfig 只创建一次 Program。使用projectService时single run 模式下不再执行文件未被任何项目收录时 reload 整个 project service 并重试的兜底逻辑该逻辑只服务于编辑器中文件信息过期的场景见 useProgramFromProjectService 实现。缓存策略随之变化默认情况下缓存条目 30 秒后过期如果disallowAutomaticSingleRunInference未开启且解析器推断为单次运行则缓存永久保留见 Parser 文档cacheLifetime一节。前提环境变量只作用于类型感知 lintingTSESTREE_SINGLE_RUN能否生效取决于parserOptions。从 inferSingleRun 实现 的判定顺序可以看出以下边界必须配置了project或projectService即使用了需要类型信息的规则。两者都没有时single run 恒为false环境变量不起作用——因为 single run 本身就意味着类型感知 linting。通过programs直接传入 Program 时Program 由用户自己管理single run 恒为false。使用project传统模式且extraFileExtensions非空时single run 被强制关闭且该判断发生在环境变量读取之前——此时即使设置TSESTREE_SINGLE_RUNtrue也不会进入 single run。原因是文档与测试都指明single-run 宿主不支持extraFileExtensions只有 watch program 宿主和 project service 支持见 inferSingleRun 测试 中extraFileExtensions相关用例。若确有.vue等扩展名需求改用projectService即可保留 single run 推断能力。如何设置 TSESTREE_SINGLE_RUN先了解默认推断逻辑再决定要不要显式设置。未设置环境变量时除非disallowAutomaticSingleRunInference为truetypescript-eslint 会自动推断CItrue大多数 CI 提供商默认设置或命令以node_modules/.bin/eslint、node_modules/eslint/bin/eslint.js即npx eslint ...启动时推断为单次运行命令行带--fix时推断为非单次运行其余情况如 IDE 插件调用默认推断为非单次运行按长驻会话处理。也就是说在典型的npx eslint .CI 流水线里 single run 通常已经被自动开启。显式设置环境变量用于两种情形环境不满足自动推断条件时强制开启或者推断结论不符合预期时强制关闭。强制开启适用于 CI 中未设置CItrue、或通过非node_modules路径调用 ESLint 的场景TSESTREE_SINGLE_RUNtrue npx eslint .强制关闭官方文档给出的示例命令例如在长驻进程或需要 watch 行为的环境里排除自动推断的误判TSESTREE_SINGLE_RUNfalse npx eslint .两点说明环境变量只识别字符串true和false其他取值视同未设置见 inferSingleRun 实现。环境变量的优先级高于自动推断测试用例证实CItrue之外再设TSESTREE_SINGLE_RUNfalse时结果为false而显式true时结果为true即显式意图覆盖启发式见 inferSingleRun 测试。除环境变量外还可以用parserOptions.disallowAutomaticSingleRunInference在配置层面关闭全部自动推断其默认值正是process.env.TSESTREE_SINGLE_RUN或false见 Parser 文档。文档建议尽可能保持该选项关闭因为它关闭的是一项自动性能优化。验证是否生效typescript-eslint 提供调试日志开关。按 TypeScript ESTree 文档 的 Debugging 一节和 性能排查文档设置DEBUGtypescript-eslint:*即可打开完整调试输出。用它对比两次运行# 强制开启并输出调试日志 TSESTREE_SINGLE_RUNtrue DEBUGtypescript-eslint:* npx eslint .single run 模式下解析器在处理project中的每个 tsconfig 时会输出类似日志文案来自 parser 源码Detected single-run/CLI usage, creating Program once ahead of time for project: ./tsconfig.json把环境变量改为false重复运行这条日志应不再出现可据此确认开关确实改变了 Program 的创建路径。若要量化收益可对照 性能排查文档 的建议用 ESLint 的TIMING1选项观察规则耗时并留意项目的第一条类型感知规则因内部缓存几乎总是显得最慢比较不同配置下的总耗时。文档给出的经验数据是自动单次运行推断在 CI 中最多带来 10-20% 的提速实际幅度以你自己的前后对比为准。限制与已知边界--fix与显式TSESTREE_SINGLE_RUNtrue同时出现时--fix循环可能对同一文件解析多次。对传统project模式typescript-eslint 会在第二次解析同一文件后回退为每次从最新源码创建隔离 Program保证 fix 结果正确但失去 AOT Program 的收益使用projectService时语言服务始终提供最新 Program不需要该回退见 parser 源码注释。如前所述project 非空extraFileExtensions组合下环境变量无法开启 single runprojectService组合则可以正常推断。该环境变量只影响 Program 管理与缓存时长不改变类型信息本身的正确性类型检查本身慢的项目Slow TypeScript Types应参照 性能排查文档 中的类型复杂度排查路径处理而不是依赖本开关。【免费下载链接】typescript-eslint:sparkles: Monorepo for all the tooling which enables ESLint to support TypeScript项目地址: https://gitcode.com/GitHub_Trending/ty/typescript-eslint创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

PostgreSQL报错invalid value for parameter timeZone Asia/Beijing的排查与修复

PostgreSQL报错invalid value for parameter timeZone Asia/Beijing的排查与修复

先说结论:这个invalid value for parameter "timeZone": "Asia/Beijing"的报错,我在中标麒麟上处理过不止一次。头一回遇到时,第一反应是去查系统时钟、查硬件时间、查NTP同步,折腾了大半天,最后发…

2026/11/7 23:58:59 阅读更多 →
SAP MDG工作流任务配置与代理分配实战指南

SAP MDG工作流任务配置与代理分配实战指南

聊到SAP-MDG的实施项目,最绕不开的一块硬骨头就是工作流任务配置。很多刚接触MDG的同事容易把注意力全放在数据模型、UI建模和校验规则上,等到了权限和审批环节,才发现工作流这一层才是真正决定系统能不能“跑起来”的关键。尤其当你面对的是…

2026/11/7 23:58:59 阅读更多 →
Mac上MySQL报错ERROR 1290?彻底搞定secure-file-priv配置

Mac上MySQL报错ERROR 1290?彻底搞定secure-file-priv配置

在Mac上折腾MySQL的同学,大概率都撞到过这个报错:高高兴兴写好一条LOAD DATA INFILE想把CSV灌进数据库,结果MySQL甩回来一句ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this…

2026/11/1 19:00:41 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/11/6 15:21:35 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/11/7 12:08:40 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/11/6 22:01:11 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/11/6 22:01:11 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/11/7 12:08:40 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/11/6 22:01:09 阅读更多 →

日新闻

周新闻

月新闻