tiktok-sparo/zh-cn/pages/reference/skeleton_folders/index.html
2024-08-22 13:43:14 -07:00

31 lines
No EOL
21 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!doctype html>
<html lang="zh-cn" 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">骨架文件夹 | 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/zh-cn/images/site/sparo-ograph.png"><meta data-rh="true" name="twitter:image" content="https://tiktok.github.io/sparo/zh-cn/images/site/sparo-ograph.png"><meta data-rh="true" property="og:url" content="https://tiktok.github.io/sparo/zh-cn/pages/reference/skeleton_folders/"><meta data-rh="true" property="og:locale" content="zh_cn"><meta data-rh="true" property="og:locale:alternate" content="en"><meta data-rh="true" name="docusaurus_locale" content="zh-cn"><meta data-rh="true" name="docsearch:language" content="zh-cn"><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="骨架文件夹 | Sparo"><meta data-rh="true" name="description" content="默认情况下sparo clone 会初始化一个稀疏签出,不包含任何 Sparo 配置文件选择,但会包含包含基本配置文件的文件夹,如 package-lock.yaml 和 package.json。我们将这个起点称为签出的 &quot;骨架&quot;,因为它显示了 monorepo 中所有项目文件夹的完整树结构,但没有它们的源代码子文件夹。换句话说,尽管每个项目的源文件被排除在外,但骨架仍然允许工程师了解其他团队的项目,以及他们自己的项目与这些其他项目的关系。这有助于避免“隧道视野”(工程师假装他们的项目是仓库中唯一的项目),同时仍然确保 Git 的高效性能。"><meta data-rh="true" property="og:description" content="默认情况下sparo clone 会初始化一个稀疏签出,不包含任何 Sparo 配置文件选择,但会包含包含基本配置文件的文件夹,如 package-lock.yaml 和 package.json。我们将这个起点称为签出的 &quot;骨架&quot;,因为它显示了 monorepo 中所有项目文件夹的完整树结构,但没有它们的源代码子文件夹。换句话说,尽管每个项目的源文件被排除在外,但骨架仍然允许工程师了解其他团队的项目,以及他们自己的项目与这些其他项目的关系。这有助于避免“隧道视野”(工程师假装他们的项目是仓库中唯一的项目),同时仍然确保 Git 的高效性能。"><link data-rh="true" rel="icon" href="/sparo/zh-cn/images/site/sparo-favicon.ico"><link data-rh="true" rel="canonical" href="https://tiktok.github.io/sparo/zh-cn/pages/reference/skeleton_folders/"><link data-rh="true" rel="alternate" href="https://tiktok.github.io/sparo/pages/reference/skeleton_folders/" hreflang="en"><link data-rh="true" rel="alternate" href="https://tiktok.github.io/sparo/zh-cn/pages/reference/skeleton_folders/" hreflang="zh-cn"><link data-rh="true" rel="alternate" href="https://tiktok.github.io/sparo/pages/reference/skeleton_folders/" hreflang="x-default"><link rel="stylesheet" href="/sparo/zh-cn/assets/css/styles.391b5f94.css">
<script src="/sparo/zh-cn/assets/js/runtime~main.37bb4c78.js" defer="defer"></script>
<script src="/sparo/zh-cn/assets/js/main.388bf42e.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="跳到主要内容"><a class="skipToContent_LamT" href="#__docusaurus_skipToContent_fallback">跳到主要内容</a></div><nav aria-label="主导航" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="切换导航栏" 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/zh-cn/"><div class="navbar__logo"><img src="/sparo/zh-cn/images/site/sparo-title.svg" alt="Sparo" class="themedComponent_tC9f themedComponent--light_jvOP"><img src="/sparo/zh-cn/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>中文(中国)</a><ul class="dropdown__menu"><li><a href="/sparo/pages/reference/skeleton_folders/" target="_self" rel="noopener noreferrer" class="dropdown__link" lang="en">English</a></li><li><a href="/sparo/zh-cn/pages/reference/skeleton_folders/" target="_self" rel="noopener noreferrer" class="dropdown__link dropdown__link--active" lang="zh-cn">中文(中国)</a></li></ul></div></div><div class="navbar__items navbar__items--right"><a class="navbar__item navbar__link" href="/sparo/zh-cn/pages/guide/getting_started/">文档</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/zh-cn/pages/support/news/">新闻</a><a class="navbar__item navbar__link" href="/sparo/zh-cn/pages/support/help/">帮助</a><div class="toggle_dsLe colorModeToggle_c7_9"><button class="clean-btn toggleButton_q0G2 toggleButtonDisabled_vKJd" type="button" disabled="" title="切换浅色/暗黑模式(当前为浅色模式)" aria-label="切换浅色/暗黑模式(当前为浅色模式)" 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.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_BTHv"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="navbarSearchContainer_k7BV"><div class="navbar__search"><span aria-label="expand searchbar" role="button" class="search-icon" tabindex="0"></span><input id="search_input_react" type="search" placeholder="Loading..." aria-label="Search" class="navbar__search-input search-bar" disabled=""></div></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="__docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper__eEv"><div class="docsWrapper_yhQ2"><button aria-label="回到顶部" class="clean-btn theme-back-to-top-button backToTopButton_nWl5" type="button"></button><div class="docRoot_uN8L"><aside class="theme-doc-sidebar-container docSidebarContainer_m9ih"><div class="sidebarViewport_lQsM"><div class="sidebar_u_rd"><nav aria-label="文档侧边栏" class="menu thin-scrollbar menu_tEKE"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link">介绍</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/sparo/zh-cn/">概述</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/sparo/zh-cn/pages/guide/getting_started/">入门指南</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/sparo/zh-cn/pages/guide/sparo_profiles/">Sparo 配置文件</a></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--active">参考</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/sparo/zh-cn/pages/reference/git_optimization/">Git 优化</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/sparo/zh-cn/pages/reference/skeleton_folders/">骨架文件夹</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/sparo/zh-cn/pages/reference/security/">安全性</a></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link">配置文件</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/sparo/zh-cn/pages/configs/profile_json/">&lt;profile-name&gt;.json</a></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link">命令</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/sparo/zh-cn/pages/commands/overview/">概述</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/sparo/zh-cn/pages/commands/sparo_auto-config/">sparo auto-config</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/sparo/zh-cn/pages/commands/sparo_checkout/">sparo checkout</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/sparo/zh-cn/pages/commands/sparo_clone/">sparo clone</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/sparo/zh-cn/pages/commands/sparo_fetch/">sparo fetch</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/sparo/zh-cn/pages/commands/sparo_pull/">sparo pull</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/sparo/zh-cn/pages/commands/sparo_git-checkout/">sparo git-checkout</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/sparo/zh-cn/pages/commands/sparo_git-clone/">sparo git-clone</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/sparo/zh-cn/pages/commands/sparo_git-fetch/">sparo git-fetch</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/sparo/zh-cn/pages/commands/sparo_git-pull/">sparo git-pull</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/sparo/zh-cn/pages/commands/sparo_init-profile/">sparo init-profile</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/sparo/zh-cn/pages/commands/sparo_list-profiles/">sparo list-profiles</a></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link">CI 命令</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/sparo/zh-cn/pages/ci_commands/overview/">概述</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/sparo/zh-cn/pages/ci_commands/sparo-ci_checkout/">sparo-ci checkout</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/sparo/zh-cn/pages/ci_commands/sparo-ci_clone/">sparo-ci clone</a></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link">支持</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/sparo/zh-cn/pages/support/help/">获取帮助</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/sparo/zh-cn/pages/support/news/">更新内容</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/sparo/zh-cn/pages/support/contributing/">贡献指南</a></li></ul></li></ul></nav></div></div></aside><main class="docMainContainer_rbFp"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_hig1"><div class="docItemContainer_BjA9"><article><div class="tocCollapsible_uNMm theme-doc-toc-mobile tocMobile_R8tC"><button type="button" class="clean-btn tocCollapsibleButton_IgjO">本页总览</button></div><div class="theme-doc-markdown markdown"><header><h1>骨架文件夹</h1></header><p>默认情况下,<code>sparo clone</code> 会初始化一个稀疏签出,不包含任何 Sparo 配置文件选择,但会包含包含基本配置文件的文件夹,如 <strong>package-lock.yaml</strong><strong>package.json</strong>。我们将这个起点称为签出的 <strong>&quot;骨架&quot;</strong>,因为它显示了 monorepo 中所有项目文件夹的完整树结构,但没有它们的源代码子文件夹。换句话说,尽管每个项目的源文件被排除在外,但骨架仍然允许工程师了解其他团队的项目,以及他们自己的项目与这些其他项目的关系。这有助于避免“隧道视野”(工程师假装他们的项目是仓库中唯一的项目),同时仍然确保 Git 的高效性能。</p>
<p>由于 Sparo 启用了 Git 稀疏签出的“锥形模式”优化,骨架使用 glob 模式来匹配整个文件夹,而不是单个文件。</p>
<h2 class="anchor anchorWithStickyNavbar_tnRO" id="骨架规范">骨架规范<a href="#骨架规范" class="hash-link" aria-label="骨架规范的直接链接" title="骨架规范的直接链接"></a></h2>
<p>包含的文件夹如下:</p>
<ul>
<li>整个 <code>common/**</code> 文件夹,通常包括所有重要的配置文件和 Rush 操作的自动安装程序。</li>
<li>对于 <strong>rush.json</strong> 中定义的每个项目,顶级项目文件夹的内容。例如,<strong>packages/my-app/package.json</strong><strong>packages/my-app/README.md</strong> 将被包含,但 <strong>packages/my-app/src/index.ts</strong> 不会被包含。</li>
<li>顶级文件夹 <code>scripts/**</code><code>plugins/**</code>,因为这些名称通常用于其他重要项目。</li>
</ul>
<p>当选择了一个 Sparo 配置文件(例如使用 <code>sparo checkout --profile my-team</code>)时,它将引入所选工作区项目下的所有源代码子文件夹。</p>
<h2 class="anchor anchorWithStickyNavbar_tnRO" id="嵌套项目的处理">嵌套项目的处理<a href="#嵌套项目的处理" class="hash-link" aria-label="嵌套项目的处理的直接链接" title="嵌套项目的处理的直接链接"></a></h2>
<p>在另一个工作区项目下嵌套一个工作区项目并不是最佳实践。例如,应避免以下文件夹组织方式:</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> (项目 <code>y</code> 嵌套在项目 <code>x</code> 内——请避免这样做)</li>
<li><strong>packages/x/y/src/index.ts</strong></li>
</ul>
<p>然而Sparo 可以正确支持这种场景。例如,如果您的配置文件选择了 <code>x</code> 而未选择 <code>y</code>,那么签出将包含 <strong>x/src/index.ts</strong>,但不包含 <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>编辑此页</a></div><div class="col lastUpdated_UiTm"></div></div></footer></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="文件选项卡"><a class="pagination-nav__link pagination-nav__link--prev" href="/sparo/zh-cn/pages/reference/git_optimization/"><div class="pagination-nav__sublabel">上一页</div><div class="pagination-nav__label">Git 优化</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/sparo/zh-cn/pages/reference/security/"><div class="pagination-nav__sublabel">下一页</div><div class="pagination-nav__label">安全性</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="#骨架规范" class="table-of-contents__link toc-highlight">骨架规范</a></li><li><a href="#嵌套项目的处理" class="table-of-contents__link toc-highlight">嵌套项目的处理</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>