turborepo
npx skills add https://github.com/kunhai-88/skills --skill turborepo
Agent 安装分布
Skill 文档
Turborepo æè½
JavaScript/TypeScript monorepo çæå»ºç³»ç»ãTurborepo ç¼åä»»å¡è¾åºå¹¶æ ¹æ®ä¾èµå¾å¹¶è¡è¿è¡ä»»å¡ã
éè¦ï¼å ä»»å¡ï¼éæ ¹ä»»å¡
ä¸è¦åå»ºæ ¹ä»»å¡ãå§ç»å建å ä»»å¡ã
å建任å¡/èæ¬/ç®¡éæ¶ï¼å¿ é¡»ï¼
- å°èæ¬æ·»å å°æ¯ä¸ªç¸å
³å
ç
package.json - 卿 ¹
turbo.json䏿³¨åä»»å¡ - æ ¹
package.jsonä» éè¿turbo runå§æ
ä¸è¦å°ä»»å¡é»è¾æ¾å¨æ ¹ package.json ä¸ãè¿ä¼ç ´å Turborepo çå¹¶è¡åã
次è¦è§åï¼turbo run vs turbo
å½å½ä»¤åå
¥ä»£ç æ¶å§ç»ä½¿ç¨ turbo runï¼
// package.json - å§ç» "turbo run"
{ "scripts": { "build": "turbo run build" } }
ç®å turbo ä»
ç¨äºä¸æ¬¡æ§ç»ç«¯å½ä»¤ï¼ç±äººç±»æä»£çç´æ¥è¾å
¥ãç»ä¸å° turbo build åå
¥ package.jsonãCI æèæ¬ã
å¿«éå³çæ
ãæéè¦é
置任å¡ãï¼å®ä¹ä»»å¡ä¾èµãLint/æ£æ¥ç±»åï¼å¹¶è¡+ç¼åï¼â ä½¿ç¨ Transit Nodes 模å¼ãæå®æå»ºè¾åºãå¤çç¯å¢åéã设置 dev/watch ä»»å¡ãå
ç¹å®é
ç½®ãå
¨å±è®¾ç½®ï¼cacheDirãdaemonï¼ã
ãæçç¼åä¸å·¥ä½ãï¼ä»»å¡è¿è¡ä½è¾åºæªæ¢å¤ â ç¼ºå° outputs é®ãç¼åæå¤æªå½ä¸ â åè gotchasãéè¦è°è¯åå¸è¾å
¥ â ä½¿ç¨ –summarize æ –dryãæ³å®å
¨è·³è¿ç¼å â ä½¿ç¨ –force æ cache: falseãè¿ç¨ç¼åä¸å·¥ä½ â åè remote-cacheãç¯å¢å¯¼è´æªå½ä¸ â åèç¯å¢ gotchasã
ãææ³ä»
è¿è¡æ´æ¹çå
ãï¼æ´æ¹çå
+ä¾èµï¼æ¨èï¼â turbo run build --affectedãèªå®ä¹åºç¡åæ¯ â --affected --affected-base=origin/developãæå¨ git æ¯è¾ â --filter=...[origin/main]ã
ãææ³è¿æ»¤å
ãï¼ä»
æ´æ¹çå
â --affectedãæå
å â --filter=webãæç®å½ â --filter=./apps/*ãå
+ä¾èµ â --filter=web...ãå
+被ä¾èµ â --filter=...webã
ãç¯å¢åéä¸å·¥ä½ãï¼è¿è¡æ¶åéä¸å¯ç¨ â ä¸¥æ ¼æ¨¡å¼è¿æ»¤ï¼é»è®¤ï¼ãç¼åå½ä¸ä½ç¯å¢é误 â åéä¸å¨ env é®ä¸ã.env æ´æ¹ä¸å¯¼è´é建 â .env ä¸å¨ inputs ä¸ãCI åé缺失 â åèç¯å¢ gotchasãæ¡æ¶åéï¼NEXT_PUBLIC_*ï¼â éè¿æ¨æèªå¨å
å«ã
ãæéè¦è®¾ç½® CIãï¼GitHub Actions â åè github-actionsãVercel é¨ç½² â åè vercelãCI ä¸çè¿ç¨ç¼å â åè remote-cacheãä»
æå»ºæ´æ¹çå
â --affected æ å¿ãè·³è¿ä¸å¿
è¦æå»º â turbo-ignoreã
ãææ³å¨å¼åæé´çè§æ´æ¹ãï¼æ´æ¹æ¶éæ°è¿è¡ä»»å¡ â turbo watchã带ä¾èµç dev æå¡å¨ â ä½¿ç¨ with é®ãä¾èµæ´æ¹æ¶éå¯ dev æå¡å¨ â ä½¿ç¨ interruptible: trueãæä¹
dev ä»»å¡ â ä½¿ç¨ persistent: trueã
å ³é®å模å¼
å¨ä»£ç ä¸ä½¿ç¨ turbo ç®åï¼turbo run å¨ package.json èæ¬ä¸ CI 管é䏿¨èãç®å turbo ç¨äºäº¤äºå¼ç»ç«¯ä½¿ç¨ã
æ ¹èæ¬ç»è¿ Turboï¼æ ¹ package.json èæ¬å¿
é¡»å§æç» turbo runï¼ä¸ç´æ¥è¿è¡ä»»å¡ã
ä½¿ç¨ && 龿¥ Turbo ä»»å¡ï¼ä¸è¦ç¨ && 龿¥ turbo ä»»å¡ã让 turbo ç¼æã
prebuild èæ¬æå¨æå»ºä¾èµï¼å¦ prebuild æå¨æå»ºå
¶ä»å
ï¼ç»è¿ Turborepo ä¾èµå¾ãä¿®å¤ï¼å¦æä¾èµå·²å£°æï¼ç§»é¤ prebuild èæ¬ï¼Turbo ç dependsOn: ["^build"] èªå¨å¤çï¼å¦æä¾èµæªå£°æï¼æ·»å ä¾èµå° package.jsonï¼ç¶åç§»é¤ prebuild èæ¬ã
è¿åº¦å®½æ³ç globalDependenciesï¼globalDependencies 影忿å
ä¸çææä»»å¡ãè¦å
·ä½ã
éå¤ä»»å¡é
ç½®ï¼æ¥æ¾è·¨ä»»å¡éå¤çé
ç½®ï¼å¯æå ãTurborepo æ¯æå
±äº«é
置模å¼ãä½¿ç¨ globalEnv ä¸ globalDependencies ç¨äºå
±äº«é
ç½®ã
ä½¿ç¨ --parallel æ å¿ï¼--parallel æ å¿ç»è¿ Turborepo ä¾èµå¾ã妿任å¡éè¦å¹¶è¡æ§è¡ï¼æ£ç¡®é
ç½® dependsOnã
æ ¹ turbo.json ä¸çå
ç¹å®ä»»å¡è¦çï¼å½å¤ä¸ªå
éè¦ä¸åä»»å¡é
ç½®æ¶ï¼ä½¿ç¨å
é
ç½®ï¼æ¯ä¸ªå
ä¸ç turbo.jsonï¼èéç¨ package#task è¦çä½¿æ ¹ turbo.json æ··ä¹±ã
å¨ inputs ä¸ä½¿ç¨ ../ éååºå
ï¼ä¸è¦ä½¿ç¨ç¸å¯¹è·¯å¾å¦ ../ å¼ç¨å
夿件ãä½¿ç¨ $TURBO_ROOT$ 代æ¿ã
ç¼ºå°æä»¶äº§çä»»å¡ç outputsï¼å¨æ è®°ç¼ºå° outputs åï¼æ£æ¥ä»»å¡å®é
产çä»ä¹ãä»
å½ä»»å¡äº§çåºè¢«ç¼åçæä»¶æ¶æ è®°ã
^build vs build æ··æ·ï¼^build = å¨ä¾èµä¸å
è¿è¡æå»ºï¼æ¤å
导å
¥çå
¶ä»å
ï¼ï¼buildï¼æ ^ï¼= å¨åä¸å
ä¸å
è¿è¡æå»ºï¼pkg#task = ç¹å®å
çä»»å¡ã
ç¯å¢åéæªåå¸ï¼å¦æ API_URL æ´æ¹ä¸ä¼å¯¼è´é建ï¼å¨ env 䏿·»å å®ã
.env æä»¶ä¸å¨ Inputs ä¸ï¼Turbo ä¸å è½½ .env æä»¶âä½ çæ¡æ¶å è½½ãä½ Turbo éè¦ç¥éæ´æ¹ï¼å¨ inputs ä¸å
å« .env æä»¶ã
Monorepo ä¸çæ ¹ .env æä»¶ï¼æ ¹ .env æä»¶æ¯å模å¼âå³ä½¿å¯¹äºå° monorepo æå¯å¨æ¨¡æ¿ãå®å建å
ä¹é´çéå¼è¦åãæ£ç¡®ï¼.env æä»¶å¨éè¦å®ä»¬çå
ä¸ã
常è§ä»»å¡é ç½®
æ åæå»ºç®¡éï¼build æ dependsOn: ["^build"] ä¸ outputsï¼dev æ cache: false ä¸ persistent: trueã
带 ^dev 模å¼ç Dev ä»»å¡ï¼ç¨äº turbo watchï¼ï¼æ ¹ turbo.json ä¸ dev æ dependsOn: ["^dev"] ä¸ persistent: falseï¼å
turbo.json è¦ç为 persistent: trueã
ç¨äºå¹¶è¡ä»»å¡ä¸ç¼å失æç Transit Nodesï¼æäºä»»å¡å¯å¹¶è¡è¿è¡ï¼ä¸éè¦ä¾èµçæå»ºè¾åºï¼ä½å¿
é¡»å¨ä¾èµæºä»£ç æ´æ¹æ¶å¤±æç¼åãTransit Nodes è§£å³ä¸¤è
ï¼å建 transit 任塿 dependsOn: ["^transit"]ï¼my-task æ dependsOn: ["transit"]ã
带ç¯å¢åéï¼ä½¿ç¨ globalEnvãglobalDependenciesãä»»å¡çº§ envã
åèç´¢å¼
é ç½®ï¼turbo.json æ¦è§ãå é ç½®ãä»»å¡é ç½®ãå ¨å±é项ãgotchasï¼ãç¼åï¼ç¼åå·¥ä½åçãè¿ç¨ç¼åãgotchasï¼ãç¯å¢åéï¼envãglobalEnvãpassThroughEnvãæ¨¡å¼ãgotchasï¼ãè¿æ»¤ï¼–filter è¯æ³æ¦è§ã常è§è¿æ»¤æ¨¡å¼ï¼ãCI/CDï¼ä¸è¬ CI ååãGitHub Actions 宿´è®¾ç½®ãVercel é¨ç½²ã模å¼ï¼ãCLIï¼turbo run åºç¡ãå½ä»¤ä¸æ å¿ï¼ãæä½³å®è·µï¼monorepo æä½³å®è·µæ¦è§ãä»åºç»æãå建å é¨å ãä¾èµç®¡çï¼ãWatch 模å¼ï¼turbo watchãå¯ä¸æä»»å¡ãdev 工使µï¼ãè¾¹çï¼å®éªæ§ï¼å¼ºå¶æ§è¡å é离ãåºäºæ ç¾çä¾èµè§åï¼ã
æ¥æºææ¡£
åºäº Turborepo 宿¹ææ¡£ï¼https://turborepo.dev/docs