From ec55fe3214027a70f5052d8b4f257c0d1c2ffa81 Mon Sep 17 00:00:00 2001 From: "patrick.lafrance" Date: Fri, 27 Feb 2026 12:24:36 -0500 Subject: [PATCH] feat: add rsbuild best practices skill and update dependencies --- .../skills/rsbuild-best-practices/SKILL.md | 57 ++++++++++++++++++ pnpm-workspace.yaml | 2 + skills-lock.json | 5 ++ workleap-react-best-practices.skill | Bin 18304 -> 0 bytes 4 files changed, 64 insertions(+) create mode 100644 .agents/skills/rsbuild-best-practices/SKILL.md delete mode 100644 workleap-react-best-practices.skill diff --git a/.agents/skills/rsbuild-best-practices/SKILL.md b/.agents/skills/rsbuild-best-practices/SKILL.md new file mode 100644 index 00000000..0ae178f5 --- /dev/null +++ b/.agents/skills/rsbuild-best-practices/SKILL.md @@ -0,0 +1,57 @@ +--- +name: rsbuild-best-practices +description: Rsbuild best practices for config, CLI workflow, type checking, bundle optimization, assets, and debugging. Use when writing, reviewing, or troubleshooting Rsbuild projects. +--- + +# Rsbuild Best Practices + +Apply these rules when writing or reviewing Rsbuild projects. + +## Configuration + +- Use `rsbuild.config.ts` and `defineConfig` +- Use `tools.rspack` or `tools.bundlerChain` only when no first-class Rsbuild option exists +- Define explicit `source.entry` values for multi-page applications +- In TypeScript projects, prefer `tsconfig.json` path aliases first + +## CLI + +- Use `rsbuild dev` for local development +- Use `rsbuild build` for production build +- Use `rsbuild preview` only for local production preview +- Use `rsbuild inspect` to inspect final Rsbuild/Rspack configs + +## Type checking + +- Use `@rsbuild/plugin-type-check` for integrated dev/build type checks +- Or run `tsc --noEmit`/`vue-tsc --noEmit` as an explicit script step + +## Bundle size optimization + +- Prefer dynamic `import()` for non-critical code paths +- Prefer lightweight libraries where possible +- Keep browserslist aligned with real compatibility requirements + +## Asset management + +- Import source-managed assets from project source directories, not from `public` +- Reference `public` files by absolute URL path + +## Security + +- Do not publish `.map` files to public servers/CDNs when production source maps are enabled + +## Debugging + +- Run with `DEBUG=rsbuild` when diagnosing config resolution or plugin behavior +- Read generated files in `dist/.rsbuild` to confirm final config, not assumed config + +## Profiling + +- Use Node CPU profiling (`--cpu-prof`) when JavaScript-side overhead is suspected +- Use `RSPACK_PROFILE=OVERVIEW` and analyze trace output for compiler-phase bottlenecks + +## Documentation + +- For the latest (v2) docs, read http://rsbuild.rs/llms.txt +- For Rsbuild v1 docs, read http://v1.rsbuild.rs/llms.txt diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 8ffda8a8..c238df6a 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -15,7 +15,9 @@ onlyBuiltDependencies: - agent-browser - core-js - core-js-pure + - edgedriver - esbuild + - geckodriver - msw - netlify-cli - sharp diff --git a/skills-lock.json b/skills-lock.json index 954b9fe4..2c056f1e 100644 --- a/skills-lock.json +++ b/skills-lock.json @@ -16,6 +16,11 @@ "sourceType": "github", "computedHash": "d473204df25defd08a7d47b55c6d124b41ebde440b774995952b65223d0d8d6f" }, + "rsbuild-best-practices": { + "source": "rstackjs/agent-skills", + "sourceType": "github", + "computedHash": "f4492b475155e925645753f32276b2aa77b7d565444527f528a8506d0b40477f" + }, "turborepo": { "source": "vercel/turborepo", "sourceType": "github", diff --git a/workleap-react-best-practices.skill b/workleap-react-best-practices.skill deleted file mode 100644 index bbb4836014743df3aecdfcaf8d1792d6e37f92de..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18304 zcmb5ULy#uG*0o#KTei_<+qR7^+qP}nwr$(C*=2Rv`um%lb7wbBj&|fMGa~nT_R6Io z4GM+|1Ox;HWLc)By)EVDasdqll#T@iMD}mj&Cb!v+Qh(~*3rbk$eGsA#L1b~-tk{) zVPxV&uPiMoBSU9noT9#EOUw!H^YR16ZQd1E# z1vPn1c6rt}kW))QxYw~)tO`mS#igc?cy6e2g%rz%Qs9_}rdbCo5UUo7E_2kJ)D&0_ zy(vn$A4>0G(Wo5(Y>QQ6-4m}xCnumRrnKhM8J|bByzpVOwh<$01DxVFvIwNH@MROT zc`U9qgV;S=^g+~G71|rntkCc+qQF)Ra~5c^qst-92IefGNHiF$rnaIiTkb$(O9|&L zqnCzzBdLcukIlGi5zlZx=x<{JzkLV{e<{M>QnmCcLBE8no+>H;+>ZX@#?*}$8~_1pDUCT?dwxOI5o zuih`Z{>oQdIo}|c;gmlH<~7qCA+>dGoP$b# zmsGfrr^`_!4^dOfHH@Vo2R?A)Acci$pAI~JEDY5VKY9qcuonC*GxgeXM6IT!m;&ta z1GFp9+G!U%kUF~AQCHdj7~fQvyYA4J#q-K<$jEG%zszOmFV7$mRb0_n;g8q(seZLP zF7KeYd$430oGZ9q7cO-7s`tBzr;7t<+%17*!C+hHU_0H9*Pkxdp|`tbN^W5OL1OLF zavBaQH{n)1;G3(h3RrWmAjoLY^t%Pm;B zVbthV0h|iV=5&`PBz6%ad6^PiX=`yP!n|0!)p*$;`Psv2AifN_hC>e$g_-Il?}qvF z#)fg#^9U&fCsEvJ{6sLCy4n@l8?a@}rlWIC80nn_I*qzg>AZA$=Tl1R`=A$M4-YPs zHlx(N2hzeAJReX2`$rS*FZgOgn!?k@LNuDq`FJ?6wAvO@N5%`EtJA`udRMLXJfRSx z#IS2koIqq^sXKsnMZ=MZM~T#@4e-HE>ae3A>3IEF7^?NA!A`xwpQE_LwW;a&6eo1o z*s4~|LJpdZ4l}4*(Y3~|iWri`5$i_M?R>q4TpdoFiP1_{24Nec(xdH`gnMAUhNP&` zvvJ8^4P65_A3`hv>36v`L>y!Vj|!#;C0m*e5=bH>78MD7Me`E0@P8 zFK}T7gk>Psq#x~QS3+5ndxRSN+*;ZVG}J8iMQPvtRXC%fQKkefFsGxW6~mDlPayj# zO(iEwqM&WH#v8`re9N%Er`%(!n+MT|+EDXB(|~#g*30-OX0uH~o$eprU{u&!QqxH~ zCC0i=Os~5gD}5qP?39|=5x>grtTNpaRg5I=)41WvTaM@2aUD1Bgf%Jt4l<>+#h^G=4svo8l~@qWR4)(R)Sgz=F`Y4!iKxX7@R}v z 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
_zfB<(yMh)pmO7$ z0-0SgE{Rw0Re2|#JZtEvn?gE}RY5g~IuVi?{_0liLh;yx-e+fo?1|pp)Z^z#jho`5 z>Gu*ErOM+zVT@4n=WOE+mpKH%2JKWo7x!&2^w9o^d-FLsLy9Kb$5Ap}qMDtDXw}W| zdoTDb>#)b)HFy=25}BJp3ZhEPGxtPju(naB1HNN!Gf4w_7f~4bpJ`7 z0Gr_}S-PibShk2Sr-_^EWr~+y ziyVdL_)n)WCU9ASfJ6{9DI0|)MT$7}HWBz(q<16TXwZyePQTS|3%f- zCWJ#m?IPj2RmMfH6a3>Ll-4dZGI2Qa+Jg>b-pqk;e4 zDwGBdMzkRNN+cbjVX>Y34EwMp2Yy-Rr=t|PE1goCEYS*^D(x%gD8_7$lrd?m^`vZw z!h+y-A#)7r-3MGsJ=^+LrJFjs4=gV5v98BNcsupyt4OnVr4=sDrkaBhE#E4C2U6YjNe%t4-y1?4d*-ve5 zRXp}9fA{R!TtSluO5YaB7#(Zf#Cx@|`DppJLwo;j`S)&W&4bmupP#wS=Kg!~g%3O5 z%Pz?@?ed)3FY+U~<@&k4`Md`96Hh%~^3^rc_L($m+#5&5lGnD=r7uqrvYF~yq|E8I z-g(jb-(mj_KmYXhRE+lCKGyl3;*0hd?>W#SHsb=5a8$x0Uh$5MM$bvL_K|hh@7YCNKZmFwii=6=c~aPir;#481JI4-FhY%Ne}w4Ct2r9YAH`u{yqD&l-6;}_hpoN~Y1 zCP>(O>i(tNTCX^RL$_{}D_i3Fn!kK8x?_!M@jD z1E<6yHXLqUJJI;BeEO5O?%W@jsl>2ueHWf*8NE24TeW^cg|oTvqT-#`e);P-r&z@L z9}kdRcc1Oti_q}exXfo?^wjR_Z@v#jPmQNZ_nOX9VlO%iG|ADZZAZkFHwV4se`r7s0C zob^jRWz-Aycc@)8wb-v)xbb%2ktFN+hc^UlS5%o<#Rqgk(!=L9k3SU3tW$gb;kseY zggllX6S<4%`_>v?XXO