name: turborepo-cachingdescription: “Configure Turborepo for efficient monorepo builds with local and remote caching. Use when setting up Turborepo, optimizing build pipelines, or implementing distributed caching.”risk: criticalsource: communitydate_added: “2026-02-27”Turborepo 缓存Turborepo 构建优化的生产模式。不要使用本技能的情况任务与 turborepo 缓存无关您需要此范围之外的不同领域或工具说明澄清目标、约束和所需的输入。应用相关的最佳实践并验证结果。提供可操作的步骤和验证方法。如果需要详细示例请打开resources/implementation-playbook.md。何时使用本技能设置新的 Turborepo 项目配置构建流水线实现远程缓存优化 CI/CD 性能从其他 monorepo 工具迁移调试缓存未命中核心概念1. Turborepo 架构Workspace Root/ ├── apps/ │ ├── web/ │ │ └── package.json │ └── docs/ │ └── package.json ├── packages/ │ ├── ui/ │ │ └── package.json │ └── config/ │ └── package.json ├── turbo.json └── package.json2. 流水线概念概念描述dependsOn必须先完成的任务cache是否缓存输出outputs要缓存的文件inputs影响缓存键的文件persistent长时间运行的任务开发服务器模板模板 1turbo.json 配置{$schema:https://turbo.build/schema.json,globalDependencies:[.env,.env.local],globalEnv:[NODE_ENV,VERCEL_URL],pipeline:{build:{dependsOn:[^build],outputs:[dist/**,.next/**,!.next/cache/**],env:[API_URL,NEXT_PUBLIC_*]},test:{dependsOn:[build],outputs:[coverage/**],inputs:[src/**/*.tsx,src/**/*.ts,test/**/*.ts]},lint:{outputs:[],cache:true},typecheck:{dependsOn:[^build],outputs:[]},dev:{cache:false,persistent:true},clean:{cache:false}}}模板 2包特定的流水线// apps/web/turbo.json{$schema:https://turbo.build/schema.json,extends:[//],pipeline:{build:{outputs:[.next/**,!.next/cache/**],env:[NEXT_PUBLIC_API_URL,NEXT_PUBLIC_ANALYTICS_ID]},test:{outputs:[coverage/**],inputs:[src/**,tests/**,jest.config.js]}}}模板 3使用 Vercel 的远程缓存# Login to Vercelnpx turbo login# Link to Vercel projectnpx turbolink# Run with remote cacheturbo build --remote-only# CI environment variablesTURBO_TOKENyour-tokenTURBO_TEAMyour-team# .github/workflows/ci.ymlname:CIon:push:branches:[main]pull_request:env:TURBO_TOKEN:${{secrets.TURBO_TOKEN}}TURBO_TEAM:${{vars.TURBO_TEAM}}jobs:build:runs-on:ubuntu-lateststeps:-uses:actions/checkoutv4-uses:actions/setup-nodev4with:node-version:20cache:npm-name:Install dependenciesrun:npm ci-name:Buildrun:npx turbo build--filter...[origin/main]-name:Testrun:npx turbo test--filter...[origin/main]模板 4自托管远程缓存// Custom remote cache server (Express)importexpressfromexpress;import{createReadStream,createWriteStream}fromfs;import{mkdir}fromfs/promises;import{join}frompath;constappexpress();constCACHE_DIR./cache;// Get artifactapp.get(/v8/artifacts/:hash,async(req,res){const{hash}req.params;constteamreq.query.teamId||default;constfilePathjoin(CACHE_DIR,team,hash);try{conststreamcreateReadStream(filePath);stream.pipe(res);}catch{res.status(404).send(Not found);}});// Put artifactapp.put(/v8/artifacts/:hash,async(req,res){const{hash}req.params;constteamreq.query.teamId||default;constdirjoin(CACHE_DIR,team);constfilePathjoin(dir,hash);awaitmkdir(dir,{recursive:true});conststreamcreateWriteStream(filePath);req.pipe(stream);stream.on(finish,(){res.json({urls:[${req.protocol}://${req.get(host)}/v8/artifacts/${hash}]});});});// Check artifact existsapp.head(/v8/artifacts/:hash,async(req,res){const{hash}req.params;constteamreq.query.teamId||default;constfilePathjoin(CACHE_DIR,team,hash);try{awaitfs.access(filePath);res.status(200).end();}catch{res.status(404).end();}});app.listen(3000);// turbo.json for self-hosted cache{remoteCache:{signature:false}}# Use self-hosted cacheturbo build--apihttp://localhost:3000--tokenmy-token--teammy-team模板 5过滤和作用域# Build specific packageturbo build--filtermyorg/web# Build package and its dependenciesturbo build--filtermyorg/web...# Build package and its dependentsturbo build--filter...myorg/ui# Build changed packages since mainturbo build--filter...[origin/main]# Build packages in directoryturbo build--filter./apps/*# Combine filtersturbo build--filtermyorg/web--filtermyorg/docs# Exclude packageturbo build--filter!myorg/docs# Include dependencies of changedturbo build--filter...[HEAD^1]...模板 6高级流水线配置{$schema:https://turbo.build/schema.json,pipeline:{build:{dependsOn:[^build],outputs:[dist/**],inputs:[$TURBO_DEFAULT$,!**/*.md,!**/*.test.*]},test:{dependsOn:[^build],outputs:[coverage/**],inputs:[src/**,tests/**,*.config.*],env:[CI,NODE_ENV]},test:e2e:{dependsOn:[build],outputs:[],cache:false},deploy:{dependsOn:[build,test,lint],outputs:[],cache:false},db:generate:{cache:false},db:push:{cache:false,dependsOn:[db:generate]},myorg/web#build:{dependsOn:[^build,myorg/db#db:generate],outputs:[.next/**],env:[NEXT_PUBLIC_*]}}}模板 7根 package.json 设置{name:my-turborepo,private:true,workspaces:[apps/*,packages/*],scripts:{build:turbo build,dev:turbo dev,lint:turbo lint,test:turbo test,clean:turbo clean rm -rf node_modules,format:prettier --write \**/*.{ts,tsx,md}\,changeset:changeset,version-packages:changeset version,release:turbo build --filter./packages/* changeset publish},devDependencies:{turbo:^1.10.0,prettier:^3.0.0,changesets/cli:^2.26.0},packageManager:npm10.0.0}调试缓存# Dry run to see what would runturbo build --dry-run# Verbose output with hashesturbo build--verbosity2# Show task graphturbo build--graph# Force no cacheturbo build--force# Show cache statusturbo build--summarize# Debug specific taskTURBO_LOG_VERBOSITYdebug turbo build--filtermyorg/web最佳实践应该做的定义显式 inputs- 避免缓存失效使用工作区协议-myorg/ui: workspace:*启用远程缓存- 在 CI 和本地之间共享在 CI 中过滤- 只构建受影响的包缓存构建输出- 而不是源文件不应该做的不要缓存开发服务器- 使用persistent: true不要在 env 中包含机密- 使用运行时环境变量不要忽略 dependsOn- 会导致竞争条件不要过度过滤- 可能遗漏依赖项资源Turborepo 文档缓存指南远程缓存局限性仅当任务与上述范围明确匹配时才使用本技能。不要将输出视为特定环境验证、测试或专家审查的替代品。如果缺少所需的输入、权限、安全边界或成功标准请停下来询问澄清。
企业数字化 ERP 产品动态
相关推荐
MySQL数据库:视图 适用环境:MySQL 8.0。 视图可以理解为“有名字、可重复查询的 SELECT”,主要用于封装查询、限制可见数据和提供稳定的查询接口 1. 视图
视图(View)是一张虚拟表,它的内容来自一个或多个基表、其他视图或表达式的查询结… · 2026/9/27 11:20:51
常用企业网站模板对比与保姆级建站教程避坑指南 常用企业网站模板对比与保姆级建站教程避坑指南 找建站公司最怕什么?不是怕网站丑,是怕被坑高价。很多老板花几万块,最后拿回来一个加载慢、SEO权重低、甚至备案都过不了的“半成品”。今天这篇 保姆级建站教程 ,不聊虚的,直接拆解… · 2026/9/27 11:20:51
电子网站建设考试新手入门:避开模板陷阱,3步拿高分 电子网站建设考试新手入门:避开模板陷阱,3步拿高分 还在用那些千篇一律的模板网站?别闹了,那种套壳的东西在 电子网站建设考试 里根本过不了关。评审老师一眼就能看出来你是直接拖拽生成的,代码冗余、结构混乱,直接判低分。 很多 新手入门… · 2026/9/27 11:20:45
Qt TextEdit 不自动换行:取消换行配置与验证 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 12:06:13
网站排名英文怎么说?3个实战案例教你避开SEO翻译陷阱 网站排名英文怎么说?3个实战案例教你避开SEO翻译陷阱 做网站这行十年,我见过太多老板拿着“模板站”当宝贝,结果上线三个月流量全是零。最扎心的痛点就俩字: 丑 ,以及 搜不到… · 2026/9/27 12:06:07
西安网站制作开发怎么选?避开模板坑的3个硬核指标 西安网站制作开发怎么选?避开模板坑的3个硬核指标 别被那些花里胡哨的模板骗了,看着光鲜,上线后慢得像蜗牛,客户根本留不住。很多西安的老板找网站制作开发团队,第一眼看中价格低、出图快,结果发现网站丑得像十年前的博客,后台乱成一锅粥,想改个按钮… · 2026/9/27 12:06:07
济南建设网站企业报价:3个实战案例揭秘域名服务器避坑指南 济南建设网站企业报价:3个实战案例揭秘域名服务器避坑指南 刚接到济南某机械厂老板电话,他拿着三家建站公司的报价单发愁。一家报8000元,说含域名服务器;一家报2万,强调独立IP和备案;还有一家只要3000,但服务器在境外。他最头疼的不是价格… · 2026/9/27 12:06:00
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现 简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01
汕头网站建设制作厂家避坑指南:5大注意事项救急 汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习 简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现 简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01
汕头网站建设制作厂家避坑指南:5大注意事项救急 汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习 简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01