mirror of
https://github.com/pengzhanbo/vuepress-theme-plume.git
synced 2026-04-23 10:58:13 +08:00
1 line
28 KiB
HTML
1 line
28 KiB
HTML
<!doctype html><html lang="en-US"><head><meta charset="utf-8" /><meta name="viewport" content="width=device-width,initial-scale=1" /><meta name="generator" content="VuePress 2.0.0-rc.28" /><meta name="theme" content="VuePress Theme Plume 1.0.0-rc.195" /><script id="check-mac-os">document.documentElement.classList.toggle('mac', /Mac|iPhone|iPod|iPad/i.test(navigator.platform))</script><script id="check-dark-mode">;(function () {const um= localStorage.getItem('vuepress-theme-appearance') || 'auto';const sm = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;const isDark = um === 'dark' || (um !== 'light' && sm);document.documentElement.dataset.theme = isDark ? 'dark' : 'light';})();</script><script type="application/ld+json">{"@context":"https://schema.org","@type":"Article","headline":"Contributing","image":[""],"dateModified":"2026-04-02T13:14:51.000Z","author":[]}</script><meta property="og:url" content="https://theme-plume.vuejs.press/en/contributing/"><meta property="og:site_name" content="Plume Theme"><meta property="og:title" content="Contributing"><meta property="og:description" content="Overview The project repository uses pnpm workspaces to implement a Monorepo, which stores multiple interrelated independent Packages. The theme is developed and maintained in t..."><meta property="og:type" content="article"><meta property="og:locale" content="en-US"><meta property="og:locale:alternate" content="zh-CN"><meta property="og:updated_time" content="2026-04-02T13:14:51.000Z"><meta property="article:modified_time" content="2026-04-02T13:14:51.000Z"><link rel="alternate" hreflang="zh-cn" href="https://theme-plume.vuejs.press/contributing/"><link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png"><link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png"><meta name="google-site-verification" content="AaTP7bapCAcoO9ZGE67ilpy99GL6tYqtD30tRHjO9Ps"><title>Contributing | Plume Theme</title><meta name="description" content="Overview The project repository uses pnpm workspaces to implement a Monorepo, which stores multiple interrelated independent Packages. The theme is developed and maintained in t..."><link rel="preload" href="/assets/style-DnsiUdcZ.css" as="style"><link rel="stylesheet" href="/assets/style-DnsiUdcZ.css"><link rel="modulepreload" href="/assets/app-B2DsuqVi.js"><link rel="modulepreload" href="/assets/plugin-vue_export-helper-CxTVcLa7.js"><link rel="modulepreload" href="/assets/chunk-DseTPa7n.js"><link rel="modulepreload" href="/assets/preload-helper-ca-nBW7U.js"><link rel="modulepreload" href="/assets/composables-DsGBjQEX.js"><link rel="modulepreload" href="/assets/VPHomeHero-D17FBc21.js"><link rel="modulepreload" href="/assets/composables-3J5ZwNFM.js"><link rel="modulepreload" href="/assets/client-C5e5tgZO.js"><link rel="modulepreload" href="/assets/theme-colors-bZHGy5AR.js"><link rel="modulepreload" href="/assets/VPButton-CjpnmuwG.js"><link rel="modulepreload" href="/assets/runtime-core.esm-bundler-CZvn3YaB.js"><link rel="modulepreload" href="/assets/runtime-dom.esm-bundler-DTRCDnrc.js"><link rel="modulepreload" href="/assets/dist-CMy7OcvW.js"><link rel="modulepreload" href="/assets/codeRepl-BV_0qCs3.js"><link rel="modulepreload" href="/assets/VPCopyright-DQT4wCul.js"><link rel="modulepreload" href="/assets/contributing-BuBirAp5.js"></head><body><div id="app"><!--[--><!--[--><div class="theme-plume vp-layout" vp-container data-v-a5aadcf6><!--[--><!--[--><!--]--><!--[--><span tabindex="-1" data-v-26bc9d93></span><a href="#VPContent" class="vp-skip-link visually-hidden" data-v-26bc9d93> Skip to content </a><!--]--><!----><header class="vp-nav" data-v-a5aadcf6 data-v-f81e37e9><div class="vp-navbar" vp-navbar data-v-f81e37e9 data-v-b90976a4><div class="wrapper" data-v-b90976a4><div class="container" data-v-b90976a4><div class="title" data-v-b90976a4><div class="vp-navbar-title" data-v-b90976a4 data-v-f77fe1b1><a class="vp-link link no-icon title" href="/en/" data-v-f77fe1b1><!--[--><!--[--><!--]--><!--[--><!--[--><!--[--><img class="vp-image dark logo" style="" src="/plume.png" alt data-v-414baac9><!--]--><!--[--><img class="vp-image light logo" style="" src="/plume.png" alt data-v-414baac9><!--]--><!--]--><!--]--><span data-v-f77fe1b1>Plume Theme</span><!--[--><!--]--><!--]--><!--[--><!--]--><!----></a></div></div><div class="content" data-v-b90976a4><div class="content-body" data-v-b90976a4><!--[--><!--]--><div class="vp-navbar-search search" data-v-b90976a4><div class="search-wrapper" data-v-62419745><!----><div id="local-search" data-v-62419745><button type="button" class="mini-search mini-search-button" aria-label="Search" data-v-62419745><span class="mini-search-button-container"><span class="mini-search-search-icon vpi-mini-search" aria-label="search icon"></span><span class="mini-search-button-placeholder">Search</span></span><span class="mini-search-button-keys"><kbd class="mini-search-button-key"></kbd><kbd class="mini-search-button-key">K</kbd></span></button></div></div></div><!--[--><!--]--><nav aria-labelledby="main-nav-aria-label" class="vp-navbar-menu menu" data-v-b90976a4 data-v-b42927e7><span id="main-nav-aria-label" class="visually-hidden" data-v-b42927e7>Main Navigation</span><!--[--><!--[--><a class="vp-link link navbar-menu-link" href="/en/guide/intro/" tabindex="0" data-v-b42927e7 data-v-29cf8989><!--[--><span class="vp-icon vpi-icon-park-outline-guide-board" style="" aria-hidden data-provider="iconify" data-v-29cf8989></span><span data-v-29cf8989>Guide</span><!----><!--]--><!--[--><!--]--><!----></a><!--]--><!--[--><a class="vp-link link navbar-menu-link" href="/en/config/intro/" tabindex="0" data-v-b42927e7 data-v-29cf8989><!--[--><span class="vp-icon vpi-icon-park-outline-setting-two" style="" aria-hidden data-provider="iconify" data-v-29cf8989></span><span data-v-29cf8989>Config</span><!----><!--]--><!--[--><!--]--><!----></a><!--]--><!--[--><a class="vp-link link navbar-menu-link" href="/en/blog/" tabindex="0" data-v-b42927e7 data-v-29cf8989><!--[--><span class="vp-icon vpi-material-symbols-article-outline" style="" aria-hidden data-provider="iconify" data-v-29cf8989></span><span data-v-29cf8989>Blog</span><!----><!--]--><!--[--><!--]--><!----></a><!--]--><!--[--><div class="vp-flyout vp-navbar-menu-group" data-v-b42927e7 data-v-15bfbb59><button type="button" class="button" aria-haspopup="true" aria-expanded="false" data-v-15bfbb59><span class="text" data-v-15bfbb59><span class="vp-icon vpi-icon-park-outline-more-three" style="" aria-hidden data-provider="iconify" data-v-15bfbb59></span><!----><span data-v-15bfbb59>More</span><!----><span class="vpi-chevron-down text-icon" data-v-15bfbb59></span></span></button><div class="menu" data-v-15bfbb59><div class="vp-menu" data-v-15bfbb59 data-v-f3964f32><div class="items" data-v-f3964f32><!--[--><!--[--><div class="vp-menu-link" data-v-f3964f32 data-v-e06ddb34><a class="vp-link link" href="/en/faq/" data-v-e06ddb34><!--[--><span class="vp-icon vpi-wpf-faq" style="" aria-hidden data-provider="iconify" data-v-e06ddb34></span> FAQ <!----><!--]--><!--[--><!--]--><!----></a></div><!--]--><!--[--><div class="vp-menu-link" data-v-f3964f32 data-v-e06ddb34><a class="vp-link link" href="/en/tools/" data-v-e06ddb34><!--[--><span class="vp-icon vpi-jam-tools" style="" aria-hidden data-provider="iconify" data-v-e06ddb34></span> Theme Tools <!----><!--]--><!--[--><!--]--><!----></a></div><!--]--><!--[--><div class="vp-menu-link" data-v-f3964f32 data-v-e06ddb34><a class="vp-link link" href="/en/friends/" data-v-e06ddb34><!--[--><span class="vp-icon vpi-carbon-friendship" style="" aria-hidden data-provider="iconify" data-v-e06ddb34></span> Friend Links <!----><!--]--><!--[--><!--]--><!----></a></div><!--]--><!--[--><div class="vp-menu-group" data-v-f3964f32 data-v-6c770283><p class="title" data-v-6c770283><span class="vp-icon vpi-logos-vue bg" style="" aria-hidden data-provider="iconify" data-v-6c770283></span><span data-v-6c770283>Vuepress</span></p><!--[--><!--[--><div class="vp-menu-link" data-v-6c770283 data-v-e06ddb34><a class="vp-link link vp-external-link-icon" href="https://v2.vuepress.vuejs.org" target="_blank" rel="noopener noreferrer" data-v-e06ddb34><!--[--><span class="vp-icon vpi-logos-vue bg" style="" aria-hidden data-provider="iconify" data-v-e06ddb34></span> Official Docs <!----><!--]--><!--[--><!--]--><span class="visually-hidden">(Open in new window)</span></a></div><!--]--><!--[--><div class="vp-menu-link" data-v-6c770283 data-v-e06ddb34><a class="vp-link link vp-external-link-icon" href="https://ecosystem.vuejs.press/" target="_blank" rel="noopener noreferrer" data-v-e06ddb34><!--[--><span class="vp-icon vpi-logos-vue bg" style="" aria-hidden data-provider="iconify" data-v-e06ddb34></span> Ecosystem <!----><!--]--><!--[--><!--]--><span class="visually-hidden">(Open in new window)</span></a></div><!--]--><!--]--></div><!--]--><!--]--></div><!--[--><!--]--></div></div></div><!--]--><!--[--><div class="vp-flyout vp-navbar-menu-group active" data-v-b42927e7 data-v-15bfbb59><button type="button" class="button" aria-haspopup="true" aria-expanded="false" data-v-15bfbb59><span class="text" data-v-15bfbb59><span class="vp-icon vpi-codicon-versions" style="" aria-hidden data-provider="iconify" data-v-15bfbb59></span><!----><span data-v-15bfbb59>1.0.0-rc.195</span><span class="vp-badge tip vp-menu-badge" style="" data-v-15bfbb59 data-v-52c8341f><!--[-->New<!--]--></span><span class="vpi-chevron-down text-icon" data-v-15bfbb59></span></span></button><div class="menu" data-v-15bfbb59><div class="vp-menu" data-v-15bfbb59 data-v-f3964f32><div class="items" data-v-f3964f32><!--[--><!--[--><div class="vp-menu-link" data-v-f3964f32 data-v-e06ddb34><a class="vp-link link" href="/en/changelog/" data-v-e06ddb34><!--[--><!----> Changelog <!----><!--]--><!--[--><!--]--><!----></a></div><!--]--><!--[--><div class="vp-menu-link" data-v-f3964f32 data-v-e06ddb34><a class="vp-link link active" href="/en/contributing/" data-v-e06ddb34><!--[--><!----> Contributing <!----><!--]--><!--[--><!--]--><!----></a></div><!--]--><!--]--></div><!--[--><!--]--></div></div></div><!--]--><!--]--></nav><!--[--><!--]--><div class="vp-flyout vp-navbar-translations translations" data-v-b90976a4 data-v-e0a18246 data-v-15bfbb59><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="Languages" data-v-15bfbb59><span class="text" data-v-15bfbb59><!----><span class="vpi-languages option-icon" data-v-15bfbb59></span><!----><!----><span class="vpi-chevron-down text-icon" data-v-15bfbb59></span></span></button><div class="menu" data-v-15bfbb59><div class="vp-menu" data-v-15bfbb59 data-v-f3964f32><!----><!--[--><!--[--><div class="items" data-v-e0a18246><p class="title" data-v-e0a18246>English</p><!--[--><div class="vp-menu-link" data-v-e0a18246 data-v-e06ddb34><a class="vp-link link" href="/contributing/" data-v-e06ddb34><!--[--><!----> 简体中文 <!----><!--]--><!--[--><!--]--><!----></a></div><!--]--></div><!--]--><!--]--></div></div></div><div class="vp-navbar-appearance appearance" data-v-b90976a4 data-v-17780d44><button class="vp-switch vp-switch-appearance" type="button" role="switch" aria-checked="false" title data-v-17780d44 data-v-cbe77d87 data-v-36bbbf22><span class="check" data-v-36bbbf22><span class="icon" data-v-36bbbf22><!--[--><span class="vpi-sun sun" data-v-cbe77d87></span><span class="vpi-moon moon" data-v-cbe77d87></span><!--]--></span></span></button></div><div class="vp-social-links vp-navbar-social-links social-links" data-v-b90976a4 data-v-ba70645a data-v-5dc0805d><!--[--><a class="vp-social-link no-icon" href="https://github.com/pengzhanbo/vuepress-theme-plume" aria-label="github" title="github" target="_blank" rel="noopener" data-v-5dc0805d data-v-c5bc2a09><span class="vp-icon vpi-simple-icons-github" style="" aria-hidden data-provider="iconify" data-v-c5bc2a09></span></a><a class="vp-social-link no-icon" href="https://qm.qq.com/q/FbPPoOIscE" aria-label="qq" title="qq" target="_blank" rel="noopener" data-v-5dc0805d data-v-c5bc2a09><span class="vp-icon vpi-simple-icons-qq" style="" aria-hidden data-provider="iconify" data-v-c5bc2a09></span></a><!--]--></div><div class="vp-flyout vp-navbar-extra extra" data-v-b90976a4 data-v-7e94ae84 data-v-15bfbb59><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="extra navigation" data-v-15bfbb59><span class="vpi-more-horizontal icon" data-v-15bfbb59></span></button><div class="menu" data-v-15bfbb59><div class="vp-menu" data-v-15bfbb59 data-v-f3964f32><!----><!--[--><!--[--><div class="group translations" data-v-7e94ae84><p class="trans-title" data-v-7e94ae84>English</p><!--[--><div class="vp-menu-link" data-v-7e94ae84 data-v-e06ddb34><a class="vp-link link" href="/contributing/" data-v-e06ddb34><!--[--><!----> 简体中文 <!----><!--]--><!--[--><!--]--><!----></a></div><!--]--></div><div class="group appearance" data-v-7e94ae84><div class="item appearance" data-v-7e94ae84><p class="label" data-v-7e94ae84>Appearance</p><div class="appearance-action" data-v-7e94ae84><button class="vp-switch vp-switch-appearance" type="button" role="switch" aria-checked="false" title data-v-7e94ae84 data-v-cbe77d87 data-v-36bbbf22><span class="check" data-v-36bbbf22><span class="icon" data-v-36bbbf22><!--[--><span class="vpi-sun sun" data-v-cbe77d87></span><span class="vpi-moon moon" data-v-cbe77d87></span><!--]--></span></span></button></div></div></div><div class="group social" data-v-7e94ae84><div class="item social-links" data-v-7e94ae84><div class="vp-social-links social-links-list" data-v-7e94ae84 data-v-5dc0805d><!--[--><a class="vp-social-link no-icon" href="https://github.com/pengzhanbo/vuepress-theme-plume" aria-label="github" title="github" target="_blank" rel="noopener" data-v-5dc0805d data-v-c5bc2a09><span class="vp-icon vpi-simple-icons-github" style="" aria-hidden data-provider="iconify" data-v-c5bc2a09></span></a><a class="vp-social-link no-icon" href="https://qm.qq.com/q/FbPPoOIscE" aria-label="qq" title="qq" target="_blank" rel="noopener" data-v-5dc0805d data-v-c5bc2a09><span class="vp-icon vpi-simple-icons-qq" style="" aria-hidden data-provider="iconify" data-v-c5bc2a09></span></a><!--]--></div></div></div><!--]--><!--]--></div></div></div><!--[--><!--]--><button type="button" class="vp-navbar-hamburger hamburger" aria-label="mobile navigation" aria-expanded="false" aria-controls="nav-screen" data-v-b90976a4 data-v-2122c19e><span class="container" data-v-2122c19e><span class="top" data-v-2122c19e></span><span class="middle" data-v-2122c19e></span><span class="bottom" data-v-2122c19e></span></span></button></div></div></div></div><div class="divider" data-v-b90976a4><div class="divider-line" data-v-b90976a4></div></div></div><!----></header><!----><!--[--><!----><!----><!--]--><!--[--><div id="VPContent" vp-content class="vp-content" data-v-a5aadcf6 data-v-d3283ff2><div class="vp-doc-container has-aside" data-v-d3283ff2 data-v-c2acd915><!--[--><!--]--><div class="container" data-v-c2acd915><div class="aside" vp-outline data-v-c2acd915><div class="aside-curtain" data-v-c2acd915></div><div class="aside-container" data-v-c2acd915><div class="aside-content" data-v-c2acd915><div class="vp-doc-aside" data-v-c2acd915 data-v-8e9ccc00><!--[--><!--]--><!--[--><!--]--><nav aria-labelledby="doc-outline-aria-label" class="vp-doc-aside-outline" role="navigation" data-v-8e9ccc00 data-v-c71a8a7e><div class="content" data-v-c71a8a7e><div class="outline-marker" data-v-c71a8a7e></div><div id="doc-outline-aria-label" aria-level="2" class="outline-title" role="heading" data-v-c71a8a7e><span data-v-c71a8a7e>On this page</span><span class="vpi-print icon" data-v-c71a8a7e></span></div><ul class="root" data-v-c71a8a7e data-v-875470cb><!--[--><!--]--></ul></div></nav><!--[--><!--[--><!--[--><!--[--><div class="aside-nav-wrapper" data-v-a5aadcf6 data-v-44a708ba><a class="vp-link link no-icon vp-external-link-icon link" href="https://github.com/pengzhanbo/vuepress-theme-plume" target="_blank" rel="noopener noreferrer" data-v-44a708ba><!--[--><span class="vp-icon vpi-tabler-star" style="" aria-hidden data-provider="iconify" data-v-44a708ba></span><span class="link-text" data-v-44a708ba>Star on GitHub</span><span class="vpi-arrow-right" data-v-44a708ba></span><!--]--><!--[--><!--]--><!----></a><a class="vp-link link no-icon vp-external-link-icon link" href="https://github.com/pengzhanbo/vuepress-theme-plume/issues/new/choose" target="_blank" rel="noopener noreferrer" data-v-44a708ba><!--[--><span class="vp-icon vpi-octicon-issue-opened-16" style="" aria-hidden data-provider="iconify" data-v-44a708ba></span><span class="link-text" data-v-44a708ba>Create Issues</span><span class="vpi-arrow-right" data-v-44a708ba></span><!--]--><!--[--><!--]--><!----></a><a class="vp-link link link" href="/sponsor/" data-v-44a708ba><!--[--><span class="vp-icon vpi-ep-milk-tea" style="" aria-hidden data-provider="iconify" data-v-44a708ba></span><span class="link-text" data-v-44a708ba>Buy me a Bubble Tea</span><span class="vpi-arrow-right" data-v-44a708ba></span><!--]--><!--[--><!--]--><!----></a></div><!--]--><!--]--><!--]--><!--]--><div class="spacer" data-v-8e9ccc00></div><!--[--><!--]--></div></div></div></div><div class="content" data-v-c2acd915><div class="content-container" data-v-c2acd915><!--[--><!--]--><main class="main" data-v-c2acd915><!----><!--[--><!--]--><!--[--><div class="vp-doc-title" data-v-42fa9e7c><!--[--><!--]--><h1 class="page-title" data-v-42fa9e7c><!----> Contributing <!----></h1><!--[--><!--[--><!--[--><!--[--><div class="vp-page-context-menu" data-v-a5aadcf6 data-v-b0188d12><div class="page-context-button" type="button" data-v-b0188d12><span class="page-context-copy" data-v-b0188d12><span class="vpi-copy" data-v-b0188d12></span><span class="text" data-v-b0188d12>Copy page</span></span><span class="page-context-toggle" data-v-b0188d12><span class="vpi-chevron-down" data-v-b0188d12></span></span></div><ul class="page-context-menu" style="display:none;" data-v-b0188d12><li data-v-b0188d12><a href="javascript:void(0)" data-v-b0188d12><span class="vpi-copy" data-v-b0188d12></span><span data-v-b0188d12>Copy page <small data-v-b0188d12>Copy page as Markdown for LLMs</small></span></a></li><!--[--><li data-v-b0188d12><a href="/en/contributing/index.md" target="_blank" rel="noopener noreferrer" aria-label="View as Markdown" type="text/markdown" data-allow-mismatch data-v-b0188d12><span class="vpi-markdown" data-v-b0188d12></span><span data-v-b0188d12>View as Markdown <span class="vpi-external-link" data-v-b0188d12></span><small data-v-b0188d12>View this page as plain text</small></span></a></li><li data-v-b0188d12><a href="https://chat.openai.com/?prompt=" target="_blank" rel="noopener noreferrer" aria-label="Open in ChatGPT" data-allow-mismatch data-v-b0188d12><span class="vpi-chatgpt" data-v-b0188d12></span><span data-v-b0188d12>Open in ChatGPT <span class="vpi-external-link" data-v-b0188d12></span><small data-v-b0188d12>Ask ChatGPT about this page</small></span></a></li><li data-v-b0188d12><a href="https://claude.ai/new?q=" target="_blank" rel="noopener noreferrer" aria-label="Open in Claude" data-allow-mismatch data-v-b0188d12><span class="vpi-claude" data-v-b0188d12></span><span data-v-b0188d12>Open in Claude <span class="vpi-external-link" data-v-b0188d12></span><small data-v-b0188d12>Ask Claude about this page</small></span></a></li><li data-v-b0188d12><a href="https://perplexity.ai/?q=" target="_blank" rel="noopener noreferrer" aria-label="Open in Perplexity" data-allow-mismatch data-v-b0188d12><span class="vpi-perplexity" data-v-b0188d12></span><span data-v-b0188d12>Open in Perplexity <span class="vpi-external-link" data-v-b0188d12></span><small data-v-b0188d12>Ask Perplexity about this page</small></span></a></li><!--]--></ul></div><!--]--><!--]--><!--]--><!--]--></div><div class="vp-doc-meta" data-v-42fa9e7c><!--[--><!--]--><!----><!----><!--[--><!--]--><p class="create-time" data-v-42fa9e7c><span class="vpi-clock icon" data-v-42fa9e7c></span><span data-v-42fa9e7c>2024-03-13</span></p></div><!--]--><!--[--><!--]--><!--[--><div class="_en_contributing_ vp-doc plume-content" vp-content data-v-c2acd915><!--[--><!--]--><div data-v-c2acd915><h2 id="overview" tabindex="-1"><a class="header-anchor" href="#overview"><span>Overview</span></a></h2><p>The project repository uses <a href="https://pnpm.io/zh/workspaces" target="_blank" rel="noopener noreferrer">pnpm workspaces</a> to implement a <a href="https://en.wikipedia.org/wiki/Monorepo" target="_blank" rel="noopener noreferrer">Monorepo</a>, which stores multiple interrelated independent Packages.</p><ul><li>The theme is developed and maintained in the <code>theme</code> directory.</li><li>Plugins are developed and maintained in the <code>plugins</code> directory.</li><li>Documentation is developed and maintained in the <code>docs</code> directory.</li></ul><p>In the <code>plugins</code> directory:</p><ul><li><code>plugin-search</code>: Provides full-text fuzzy search functionality for the theme.</li><li><code>plugin-md-power</code>: Provides enhanced markdown features.</li><li><code>plugin-fonts</code>: Provides special character font support</li></ul><h2 id="development-configuration" tabindex="-1"><a class="header-anchor" href="#development-configuration"><span>Development Configuration</span></a></h2><p>Development requirements:</p><ul><li><a href="http://nodejs.org/" target="_blank" rel="noopener noreferrer">Node.js</a> version 20.19.0+</li><li><a href="https://pnpm.io/zh/" target="_blank" rel="noopener noreferrer">pnpm</a> version 9+</li></ul><p>Clone the repository and install dependencies:</p><div class="language-sh" data-highlighter="shiki" data-ext="sh" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212;"><pre class="shiki shiki-themes vitesse-light vitesse-dark vp-code"><code class="language-sh"><span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">pnpm</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;"> install</span></span></code></pre></div><p>Before starting the development service for the first time, build the source code:</p><div class="language-sh" data-highlighter="shiki" data-ext="sh" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212;"><pre class="shiki shiki-themes vitesse-light vitesse-dark vp-code"><code class="language-sh"><span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">pnpm</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;"> build</span></span></code></pre></div><h3 id="main-tools" tabindex="-1"><a class="header-anchor" href="#main-tools"><span>Main Tools</span></a></h3><ul><li><a href="https://www.typescriptlang.org/" target="_blank" rel="noopener noreferrer">TypeScript</a> as the development language.</li><li><a href="https://eslint.org/" target="_blank" rel="noopener noreferrer">ESLint</a> for code checking and formatting.</li><li><a href="https://stylelint.io/" target="_blank" rel="noopener noreferrer">StyleLint</a> for code checking and formatting.</li></ul><h3 id="scripts" tabindex="-1"><a class="header-anchor" href="#scripts"><span>Scripts</span></a></h3><h4 id="pnpm-build" tabindex="-1"><a class="header-anchor" href="#pnpm-build"><span><code>pnpm build</code></span></a></h4><p>The <code>build</code> command uses <code>tsc</code> to compile the source code into <code>.js</code> files in the <code>lib</code> directory. It also copies resources that do not need to be compiled to the corresponding <code>lib</code> directory.</p><p>After cloning the repository, you need to run this command first to ensure that the project code can run smoothly, as the compiled output directory is excluded from the repository by <code>.gitignore</code>.</p><h4 id="pnpm-dev" tabindex="-1"><a class="header-anchor" href="#pnpm-dev"><span><code>pnpm dev</code></span></a></h4><p>The <code>dev</code> command starts two services locally. One runs the <code>tsup:watch & copy:watch</code> for the <code>theme</code> directory, and the other runs the <code>vuepress</code> development service for the example <code>docs</code> directory.</p><p>By default, all plugins under the <code>plugins</code> directory do not have a <code>dev</code> command. Therefore, changes to the <code>plugins</code> directory may require running the <code>pnpm build</code> command to rebuild. Some changes to the <code>plugins/**/node</code> directory require re-running <code>pnpm dev</code> to take effect.</p><h4 id="pnpm-lint" tabindex="-1"><a class="header-anchor" href="#pnpm-lint"><span><code>pnpm lint</code></span></a></h4><p>The <code>lint</code> command uses ESLint to check all source files.</p><p>When <code>lint</code> reports errors, you can manually modify the source code to fix the ESLint errors, or run <code>pnpm lint:fix</code> to automatically fix them.</p><h4 id="pnpm-test" tabindex="-1"><a class="header-anchor" href="#pnpm-test"><span><code>pnpm test</code></span></a></h4><p>The <code>test</code> command uses Vitest to run all tests.</p><h3 id="ide-support" tabindex="-1"><a class="header-anchor" href="#ide-support"><span>IDE Support</span></a></h3><p>It is recommended to use <code>vs code</code> for development. This repository is configured with the recommended <code>vs code</code> extensions for developing this theme. When you import this repository, <code>vs code</code> may recommend that you install some extensions.</p></div><!----><!----><!----><!----></div><!--]--></main><div id="comment" class="giscus-wrapper input-top vp-comment" vp-comment style="display:block;" data-v-c2acd915><div style="display: flex;align-items: center;justify-content: center;height: 96px"><span style="--loading-icon: url("data:image/svg+xml;charset=utf8,%3Csvg preserveAspectRatio=%22xMidYMid%22 viewBox=%2225 25 50 50%22%3E%3CanimateTransform attributeName=%22transform%22 type=%22rotate%22 dur=%222s%22 keyTimes=%220;1%22 repeatCount=%22indefinite%22 values=%220;360%22%3E%3C/animateTransform%3E%3Ccircle cx=%2250%22 cy=%2250%22 r=%2220%22 fill=%22none%22 stroke=%22currentColor%22 stroke-width=%224%22 stroke-linecap=%22round%22%3E%3Canimate attributeName=%22stroke-dasharray%22 dur=%221.5s%22 keyTimes=%220;0.5;1%22 repeatCount=%22indefinite%22 values=%221,200;90,200;1,200%22%3E%3C/animate%3E%3Canimate attributeName=%22stroke-dashoffset%22 dur=%221.5s%22 keyTimes=%220;0.5;1%22 repeatCount=%22indefinite%22 values=%220;-35px;-125px%22%3E%3C/animate%3E%3C/circle%3E%3C/svg%3E");--icon-size: 48px;display: inline-block;width: var(--icon-size);height: var(--icon-size);background-color: currentcolor;-webkit-mask-image: var(--loading-icon);mask-image: var(--loading-icon)"></span></div></div><!--[--><!--]--></div></div></div><!--[--><!--]--></div></div><!--]--><button type="button" class="vp-back-to-top" aria-label="back to top" data-v-a5aadcf6 style="display:none;" data-v-7a6b3799><span class="percent" data-allow-mismatch data-v-7a6b3799>0%</span><span class="show icon vpi-back-to-top" data-v-7a6b3799></span><svg aria-hidden="true" data-v-7a6b3799><circle cx="50%" cy="50%" data-allow-mismatch style="stroke-dasharray:calc(0% - 12.566370614359172px) calc(314.1592653589793% - 12.566370614359172px);" data-v-7a6b3799></circle></svg></button><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewbox="0 0 24 24" aria-label="sign down" class="vp-sign-down" aria-hidden="true" data-v-a5aadcf6 style="display:none;" data-v-43069080><g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2.5" data-v-43069080><path d="m19 11l-7 6l-7-6" data-v-43069080></path><path d="m19 5l-7 6l-7-6" opacity="0.6" data-v-43069080></path></g></svg><footer class="vp-footer" vp-footer data-v-a5aadcf6 data-v-b83cc7e0><!--[--><div class="container" data-v-b83cc7e0><div class="message" data-v-b83cc7e0>Powered by <a target="_blank" href="https://v2.vuepress.vuejs.org/">VuePress</a> & <a target="_blank" href="https://theme-plume.vuejs.press">vuepress-theme-plume</a></div><div class="copyright" data-v-b83cc7e0>Copyright © 2021-present pengzhanbo</div></div><!--]--></footer><!--[--><!--]--><!--]--></div><!----><!--]--><!--[--><!--]--><!--]--></div><script type="module" src="/assets/app-B2DsuqVi.js" defer></script></body></html> |