mirror of
https://github.com/tiktok/sparo.git
synced 2025-01-25 05:19:43 -05:00
31 lines
22 KiB
HTML
31 lines
22 KiB
HTML
|
<!doctype html>
|
|||
|
<html lang="en" dir="ltr" class="docs-wrapper plugin-docs plugin-id-default docs-version-current docs-doc-page docs-doc-id-pages/reference/skeleton_folders" data-has-hydrated="false">
|
|||
|
<head>
|
|||
|
<meta charset="UTF-8">
|
|||
|
<meta name="generator" content="Docusaurus v3.1.1">
|
|||
|
<title data-rh="true">Skeleton folders | Sparo</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://tiktok.github.io/sparo/_preview/pr-76/images/site/sparo-ograph.png"><meta data-rh="true" name="twitter:image" content="https://tiktok.github.io/sparo/_preview/pr-76/images/site/sparo-ograph.png"><meta data-rh="true" property="og:url" content="https://tiktok.github.io/sparo/_preview/pr-76/pages/reference/skeleton_folders/"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="Skeleton folders | Sparo"><meta data-rh="true" name="description" content="By default sparo clones initializes a sparse checkout that does not include any Sparo profile selections, but does include folders containing essential config files such as package-lock.yaml and package.json. We call this starting point the checkout "skeleton" because it shows the full tree of all project folders in your monorepo, but without their source code subfolders. In other words, although the source files for each project are excluded, the skeleton nonetheless allows engineers to remain aware of other team's projects, and how their own project relates to those other projects. This discourages "tunnel vision" (where engineers pretend their project is the only project in the repository), while still ensuring fast Git performance."><meta data-rh="true" property="og:description" content="By default sparo clones initializes a sparse checkout that does not include any Sparo profile selections, but does include folders containing essential config files such as package-lock.yaml and package.json. We call this starting point the checkout "skeleton" because it shows the full tree of all project folders in your monorepo, but without their source code subfolders. In other words, although the source files for each project are excluded, the skeleton nonetheless allows engineers to remain aware of other team's projects, and how their own project relates to those other projects. This discourages "tunnel vision" (where engineers pretend their project is the only project in the repository), while still ensuring fast Git performance."><link data-rh="true" rel="icon" href="/sparo/_preview/pr-76/images/site/sparo-favicon.ico"><link data-rh="true" rel="canonical" href="https://tiktok.github.io/sparo/_preview/pr-76/pages/reference/skeleton_folders/"><link data-rh="true" rel="alternate" href="https://tiktok.github.io/sparo/_preview/pr-76/pages/reference/skeleton_folders/" hreflang="en"><link data-rh="true" rel="alternate" href="https://tiktok.github.io/sparo/_preview/pr-76/pages/reference/skeleton_folders/" hreflang="x-default"><link rel="stylesheet" href="/sparo/_preview/pr-76/assets/css/styles.391b5f94.css">
|
|||
|
<script src="/sparo/_preview/pr-76/assets/js/runtime~main.79377ed7.js" defer="defer"></script>
|
|||
|
<script src="/sparo/_preview/pr-76/assets/js/main.692195db.js" defer="defer"></script>
|
|||
|
</head>
|
|||
|
<body class="navigation-with-keyboard">
|
|||
|
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}()</script><div id="__docusaurus"><div role="region" aria-label="Skip to main content"><a class="skipToContent_LamT" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/sparo/_preview/pr-76/"><div class="navbar__logo"><img src="/sparo/_preview/pr-76/images/site/sparo-title.svg" alt="Sparo" class="themedComponent_tC9f themedComponent--light_jvOP"><img src="/sparo/_preview/pr-76/images/site/sparo-title-dark.svg" alt="Sparo" class="themedComponent_tC9f themedComponent--dark_id3o"></div><b class="navbar__title text--truncate"></b></a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link"><svg viewBox="0 0 24 24" width="20" height="20" aria-hidden="true" class="iconLanguage_STns"><path fill="currentColor" d="M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z"></path></svg>English</a><ul class="dropdown__menu"><li><a href="/sparo/_preview/pr-76/pages/reference/skeleton_folders/" target="_self" rel="noopener noreferrer" class="dropdown__link dropdown__link--active" lang="en">English</a></li></ul></div></div><div class="navbar__items navbar__items--right"><a class="navbar__item navbar__link" href="/sparo/_preview/pr-76/pages/guide/getting_started/">Docs</a><a href="https://github.com/tiktok/sparo" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_AFhm"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a><a class="navbar__item navbar__link" href="/sparo/_preview/pr-76/pages/support/news/">News</a><a class="navbar__item navbar__link" href="/sparo/_preview/pr-76/pages/support/help/">Help</a><div class="toggle_dsLe colorModeToggle_c7_9"><button class="clean-btn toggleButton_q0G2 toggleButtonDisabled_vKJd" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_ZA7w"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.
|
|||
|
<p>Because Sparo enables the "cone mode" optimization for Git sparse checkout, the skeleton uses globs to match entire folders, not individual files.</p>
|
|||
|
<h2 class="anchor anchorWithStickyNavbar_tnRO" id="skeleton-spec">Skeleton spec<a href="#skeleton-spec" class="hash-link" aria-label="Direct link to Skeleton spec" title="Direct link to Skeleton spec"></a></h2>
|
|||
|
<p>The included folders are as follows:</p>
|
|||
|
<ul>
|
|||
|
<li>The entire <code>common/**</code> folder, which generally includes all the important config files and autoinstallers for Rush operations</li>
|
|||
|
<li>For every project defined in <strong>rush.json</strong>, the top-level project folder contents. For example, <strong>packages/my-app/package.json</strong> and <strong>packages/my-app/README.md</strong> will be included, but not <strong>packages/my-app/src/index.ts</strong>.</li>
|
|||
|
<li>The <code>scripts/**</code> and <code>plugins/**</code> top-level folders, because these names are commonly used for other essential projects.</li>
|
|||
|
</ul>
|
|||
|
<p>When a Sparo profile is chosen (for example using <code>sparo checkout --profile my-team</code>), it will bring in all the source code subfolders under the selected workspace projects.</p>
|
|||
|
<h2 class="anchor anchorWithStickyNavbar_tnRO" id="handling-of-nested-projects">Handling of nested projects<a href="#handling-of-nested-projects" class="hash-link" aria-label="Direct link to Handling of nested projects" title="Direct link to Handling of nested projects"></a></h2>
|
|||
|
<p>It is not a best practice for a workspace project to be nested under another workspace project. For example, this folder organization should be avoided:</p>
|
|||
|
<ul>
|
|||
|
<li><strong>packages/x/package.json</strong></li>
|
|||
|
<li><strong>packages/x/src/index.ts</strong></li>
|
|||
|
<li><strong>packages/x/y/package.json</strong> (project <code>y</code> is nested inside project <code>x</code> -- don't do this)</li>
|
|||
|
<li><strong>packages/x/y/src/index.ts</strong></li>
|
|||
|
</ul>
|
|||
|
<p>Sparo correctly supports this scenario, however. For example, if your profile selects <code>x</code> but not <code>y</code>, then the checkout will include <strong>x/src/index.ts</strong> but exclude <strong>x/y/src/index.ts</strong>.</p></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="theme-doc-footer-edit-meta-row row"><div class="col"><a href="https://github.com/tiktok/sparo/tree/main/apps/website/docs/pages/reference/skeleton_folders.md" target="_blank" rel="noopener noreferrer" class="theme-edit-this-page"><svg fill="currentColor" height="20" width="20" viewBox="0 0 40 40" class="iconEdit_asm8" aria-hidden="true"><g><path d="m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"></path></g></svg>Edit this page</a></div><div class="col lastUpdated_UiTm"></div></div></footer></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages"><a class="pagination-nav__link pagination-nav__link--prev" href="/sparo/_preview/pr-76/pages/reference/git_optimization/"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">Git optimization</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/sparo/_preview/pr-76/pages/reference/security/"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">Security</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_lG5c thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#skeleton-spec" class="table-of-contents__link toc-highlight">Skeleton spec</a></li><li><a href="#handling-of-nested-projects" class="table-of-contents__link toc-highlight">Handling of nested projects</a></li></ul></div></div></div></div></main></div></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="footer__bottom text--center"><div class="footer__copyright">Copyright © 2024 TikTok Pte. Ltd.</div></div></div></footer></div>
|
|||
|
</body>
|
|||
|
</html>
|