Files
upage-git/upage/contributing/development-setup.html
2025-09-29 03:02:50 +00:00

78 lines
32 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-Hans" dir="ltr" class="docs-wrapper plugin-docs plugin-id-default docs-version-current docs-doc-page docs-doc-id-contributing/development-setup" data-has-hydrated="false">
<head>
<meta charset="UTF-8">
<meta name="generator" content="Docusaurus v3.9.0">
<title data-rh="true">开发环境设置 | UPage 文档</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://halo-dev.github.io/upage/img/social-card.png"><meta data-rh="true" name="twitter:image" content="https://halo-dev.github.io/upage/img/social-card.png"><meta data-rh="true" property="og:url" content="https://halo-dev.github.io/upage/contributing/development-setup"><meta data-rh="true" property="og:locale" content="zh_Hans"><meta data-rh="true" name="docusaurus_locale" content="zh-Hans"><meta data-rh="true" name="docsearch:language" content="zh-Hans"><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="开发环境设置 | UPage 文档"><meta data-rh="true" name="description" content="本指南将帮助您设置 UPage 的本地开发环境,以便您可以开始贡献代码。"><meta data-rh="true" property="og:description" content="本指南将帮助您设置 UPage 的本地开发环境,以便您可以开始贡献代码。"><link data-rh="true" rel="icon" href="/upage/../public/favicon.svg"><link data-rh="true" rel="canonical" href="https://halo-dev.github.io/upage/contributing/development-setup"><link data-rh="true" rel="alternate" href="https://halo-dev.github.io/upage/contributing/development-setup" hreflang="zh-Hans"><link data-rh="true" rel="alternate" href="https://halo-dev.github.io/upage/contributing/development-setup" hreflang="x-default"><script data-rh="true" type="application/ld+json">{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"贡献指南","item":"https://halo-dev.github.io/upage/contributing"},{"@type":"ListItem","position":2,"name":"开发环境设置","item":"https://halo-dev.github.io/upage/contributing/development-setup"}]}</script><link rel="stylesheet" href="/upage/assets/css/styles.8ea0c4aa.css">
<script src="/upage/assets/js/runtime~main.8350f77c.js" defer="defer"></script>
<script src="/upage/assets/js/main.648541e0.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg style="display: none;"><defs>
<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><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"/></symbol>
</defs></svg>
<script>!function(){var t=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",t||(window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light")),document.documentElement.setAttribute("data-theme-choice",t||"system")}(),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_SnWU" href="#__docusaurus_skipToContent_fallback">跳到主要内容</a></div><nav aria-label="主导航" class="theme-layout-navbar navbar navbar--fixed-top"><div class="navbar__inner"><div class="theme-layout-navbar-left 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="/upage/"><div class="navbar__logo"><img src="/upage/img/logo.svg" alt="UPage Logo" class="themedComponent_PxYp themedComponent--light_BsnN"><img src="/upage/img/logo.svg" alt="UPage Logo" class="themedComponent_PxYp themedComponent--dark_P6BI"></div><b class="navbar__title text--truncate">UPage</b></a><a aria-current="page" class="navbar__item navbar__link navbar__link--active" href="/upage/">使用文档</a></div><div class="theme-layout-navbar-right navbar__items navbar__items--right"><a href="https://github.com/halo-dev/upage" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">GitHub<svg width="13.5" height="13.5" aria-label="(opens in new tab)" class="iconExternalLink_xtnk"><use href="#theme-svg-external-link"></use></svg></a><div class="toggle_crTl colorModeToggle_eWi8"><button class="clean-btn toggleButton_BQDk toggleButtonDisabled_lECB" type="button" disabled="" title="system mode" aria-label="切换浅色/暗黑模式当前为system mode"><svg viewBox="0 0 24 24" width="24" height="24" aria-hidden="true" class="toggleIcon_KZAc lightToggleIcon_LT1z"><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" aria-hidden="true" class="toggleIcon_KZAc darkToggleIcon_fJCx"><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><svg viewBox="0 0 24 24" width="24" height="24" aria-hidden="true" class="toggleIcon_KZAc systemToggleIcon_m6ZP"><path fill="currentColor" d="m12 21c4.971 0 9-4.029 9-9s-4.029-9-9-9-9 4.029-9 9 4.029 9 9 9zm4.95-13.95c1.313 1.313 2.05 3.093 2.05 4.95s-0.738 3.637-2.05 4.95c-1.313 1.313-3.093 2.05-4.95 2.05v-14c1.857 0 3.637 0.737 4.95 2.05z"></path></svg></button></div><div class="navbarSearchContainer_GyVn"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="__docusaurus_skipToContent_fallback" class="theme-layout-main main-wrapper mainWrapper_fO6_"><div class="docsWrapper_G3eT"><button aria-label="回到顶部" class="clean-btn theme-back-to-top-button backToTopButton_nMBz" type="button"></button><div class="docRoot_iPwj"><aside class="theme-doc-sidebar-container docSidebarContainer_Yovm"><div class="sidebarViewport_e1um"><div class="sidebar_xcav"><nav aria-label="文档侧边栏" class="menu thin-scrollbar menu_EjuG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/upage/"><span title="首页" class="linkLabel_fmgc">首页</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/upage/quick-start"><span title="快速开始" class="linkLabel_fmgc">快速开始</span></a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="categoryLink__DnE menu__link menu__link--sublist" href="/upage/deployment-guide"><span title="部署指南" class="categoryLinkLabel_rUKM">部署指南</span></a><button aria-label="展开侧边栏分类 &#x27;部署指南&#x27;" aria-expanded="false" type="button" class="clean-btn menu__caret"></button></div></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/upage/configuration"><span title="配置参考" class="linkLabel_fmgc">配置参考</span></a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="categoryLink__DnE menu__link menu__link--sublist" href="/upage/user-guide"><span title="用户指南" class="categoryLinkLabel_rUKM">用户指南</span></a><button aria-label="展开侧边栏分类 &#x27;用户指南&#x27;" aria-expanded="false" type="button" class="clean-btn menu__caret"></button></div></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="categoryLink__DnE menu__link menu__link--sublist menu__link--active" href="/upage/contributing"><span title="贡献指南" class="categoryLinkLabel_rUKM">贡献指南</span></a><button aria-label="折叠侧边栏分类 &#x27;贡献指南&#x27;" aria-expanded="true" type="button" class="clean-btn menu__caret"></button></div><ul 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="/upage/contributing/code-of-conduct"><span title="行为准则" class="linkLabel_fmgc">行为准则</span></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="/upage/contributing/ways-to-contribute"><span title="贡献方式" class="linkLabel_fmgc">贡献方式</span></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="/upage/contributing/development-setup"><span title="开发环境设置" class="linkLabel_fmgc">开发环境设置</span></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="/upage/contributing/code-standards"><span title="代码规范" class="linkLabel_fmgc">代码规范</span></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="/upage/contributing/workflow"><span title="工作流程" class="linkLabel_fmgc">工作流程</span></a></li></ul></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/upage/faq"><span title="常见问题" class="linkLabel_fmgc">常见问题</span></a></li></ul></nav></div></div></aside><main class="docMainContainer_WqOS"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_s9lu"><div class="docItemContainer_Wij8"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_dPwh" aria-label="页面路径"><ul class="breadcrumbs"><li class="breadcrumbs__item"><a aria-label="主页面" class="breadcrumbs__link" href="/upage/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_xzA8"><path d="M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z" fill="currentColor"></path></svg></a></li><li class="breadcrumbs__item"><a class="breadcrumbs__link" href="/upage/contributing"><span>贡献指南</span></a></li><li class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link">开发环境设置</span></li></ul></nav><div class="tocCollapsible_S5VF theme-doc-toc-mobile tocMobile_gigA"><button type="button" class="clean-btn tocCollapsibleButton_wmrO">本页总览</button></div><div class="theme-doc-markdown markdown"><header><h1>开发环境设置</h1></header>
<p>本指南将帮助您设置 UPage 的本地开发环境,以便您可以开始贡献代码。</p>
<h2 class="anchor anchorWithStickyNavbar_hmm4" id="前置条件">前置条件<a href="#前置条件" class="hash-link" aria-label="前置条件的直接链接" title="前置条件的直接链接" translate="no"></a></h2>
<p>开始开发 UPage 前,请确保您的系统满足以下要求:</p>
<ul>
<li><strong>Node.js</strong>: 18.18.0 或更高版本</li>
<li><strong>pnpm</strong>: 9.4.0 或更高版本</li>
<li><strong>Git</strong>: 最新版本</li>
</ul>
<h3 class="anchor anchorWithStickyNavbar_hmm4" id="安装-nodejs">安装 Node.js<a href="#安装-nodejs" class="hash-link" aria-label="安装 Node.js的直接链接" title="安装 Node.js的直接链接" translate="no"></a></h3>
<p>您可以从 <a href="https://nodejs.org/" target="_blank" rel="noopener noreferrer">Node.js 官网</a> 下载并安装 Node.js或使用版本管理工具如 <a href="https://github.com/nvm-sh/nvm" target="_blank" rel="noopener noreferrer">nvm</a></p>
<div class="language-bash codeBlockContainer_tLQ_ theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_HMSW"><pre tabindex="0" class="prism-code language-bash codeBlock_HMKa thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_tPUF"><span class="token-line" style="color:#393A34"><span class="token plain"># 使用 nvm 安装 Node.js</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">nvm install 18.18.0</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">nvm use 18.18.0</span><br></span></code></pre></div></div>
<h3 class="anchor anchorWithStickyNavbar_hmm4" id="安装-pnpm">安装 pnpm<a href="#安装-pnpm" class="hash-link" aria-label="安装 pnpm的直接链接" title="安装 pnpm的直接链接" translate="no"></a></h3>
<p>安装 pnpm 的最简单方法是通过 npm</p>
<div class="language-bash codeBlockContainer_tLQ_ theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_HMSW"><pre tabindex="0" class="prism-code language-bash codeBlock_HMKa thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_tPUF"><span class="token-line" style="color:#393A34"><span class="token plain">npm install -g pnpm@9.4.0</span><br></span></code></pre></div></div>
<p>或者按照 <a href="https://pnpm.io/installation" target="_blank" rel="noopener noreferrer">pnpm 官方文档</a> 的说明进行安装。</p>
<h2 class="anchor anchorWithStickyNavbar_hmm4" id="克隆仓库">克隆仓库<a href="#克隆仓库" class="hash-link" aria-label="克隆仓库的直接链接" title="克隆仓库的直接链接" translate="no"></a></h2>
<p>首先,<a href="https://github.com/halo-dev/upage/fork" target="_blank" rel="noopener noreferrer">fork UPage 仓库</a>到您的 GitHub 账户,然后将其克隆到本地:</p>
<div class="language-bash codeBlockContainer_tLQ_ theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_HMSW"><pre tabindex="0" class="prism-code language-bash codeBlock_HMKa thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_tPUF"><span class="token-line" style="color:#393A34"><span class="token plain"># 克隆您 fork 的仓库</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">git clone https://github.com/YOUR-USERNAME/upage.git</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"># 进入项目目录</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">cd upage</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"># 添加上游仓库</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">git remote add upstream https://github.com/halo-dev/upage.git</span><br></span></code></pre></div></div>
<h2 class="anchor anchorWithStickyNavbar_hmm4" id="安装依赖">安装依赖<a href="#安装依赖" class="hash-link" aria-label="安装依赖的直接链接" title="安装依赖的直接链接" translate="no"></a></h2>
<p>使用 pnpm 安装项目依赖:</p>
<div class="language-bash codeBlockContainer_tLQ_ theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_HMSW"><pre tabindex="0" class="prism-code language-bash codeBlock_HMKa thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_tPUF"><span class="token-line" style="color:#393A34"><span class="token plain">pnpm install</span><br></span></code></pre></div></div>
<h2 class="anchor anchorWithStickyNavbar_hmm4" id="生成-prisma-客户端">生成 Prisma 客户端<a href="#生成-prisma-客户端" class="hash-link" aria-label="生成 Prisma 客户端的直接链接" title="生成 Prisma 客户端的直接链接" translate="no"></a></h2>
<p>UPage 使用 Prisma 作为数据库 ORM因此需要生成 Prisma 客户端。</p>
<div class="language-bash codeBlockContainer_tLQ_ theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_HMSW"><pre tabindex="0" class="prism-code language-bash codeBlock_HMKa thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_tPUF"><span class="token-line" style="color:#393A34"><span class="token plain">pnpm setup</span><br></span></code></pre></div></div>
<h2 class="anchor anchorWithStickyNavbar_hmm4" id="配置环境变量">配置环境变量<a href="#配置环境变量" class="hash-link" aria-label="配置环境变量的直接链接" title="配置环境变量的直接链接" translate="no"></a></h2>
<p>拷贝 <code>.env.example</code> 文件,创建 <code>.env</code> 文件:</p>
<div class="language-bash codeBlockContainer_tLQ_ theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_HMSW"><pre tabindex="0" class="prism-code language-bash codeBlock_HMKa thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_tPUF"><span class="token-line" style="color:#393A34"><span class="token plain">cp .env.example .env</span><br></span></code></pre></div></div>
<p>按照<a href="/upage/configuration">配置参考</a>的说明修改 <code>.env</code> 文件进行配置。</p>
<h2 class="anchor anchorWithStickyNavbar_hmm4" id="启用-logto-认证可选">启用 Logto 认证(可选)<a href="#启用-logto-认证可选" class="hash-link" aria-label="启用 Logto 认证(可选)的直接链接" title="启用 Logto 认证(可选)的直接链接" translate="no"></a></h2>
<p>UPage 默认仅支持单一用户匿名访问,如果您想要开发用户认证功能,可以按照<a href="/upage/deployment/logto">Logto 认证集成</a>的说明配置 Logto 认证。</p>
<h2 class="anchor anchorWithStickyNavbar_hmm4" id="启动开发服务器">启动开发服务器<a href="#启动开发服务器" class="hash-link" aria-label="启动开发服务器的直接链接" title="启动开发服务器的直接链接" translate="no"></a></h2>
<p>启动开发服务器,这将允许您在本地预览和测试您的更改:</p>
<div class="language-bash codeBlockContainer_tLQ_ theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_HMSW"><pre tabindex="0" class="prism-code language-bash codeBlock_HMKa thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_tPUF"><span class="token-line" style="color:#393A34"><span class="token plain">pnpm dev</span><br></span></code></pre></div></div>
<p>此命令会启动开发服务器,您可以通过 <code>http://localhost:5173</code> 访问。</p>
<h2 class="anchor anchorWithStickyNavbar_hmm4" id="构建项目">构建项目<a href="#构建项目" class="hash-link" aria-label="构建项目的直接链接" title="构建项目的直接链接" translate="no"></a></h2>
<p>要构建生产版本的项目,运行:</p>
<div class="language-bash codeBlockContainer_tLQ_ theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_HMSW"><pre tabindex="0" class="prism-code language-bash codeBlock_HMKa thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_tPUF"><span class="token-line" style="color:#393A34"><span class="token plain">pnpm build</span><br></span></code></pre></div></div>
<p>构建完成后,您可以通过以下命令预览生产版本:</p>
<div class="language-bash codeBlockContainer_tLQ_ theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_HMSW"><pre tabindex="0" class="prism-code language-bash codeBlock_HMKa thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_tPUF"><span class="token-line" style="color:#393A34"><span class="token plain">pnpm preview</span><br></span></code></pre></div></div>
<p>预生产版本项目运行在 <code>http://localhost:3000</code></p>
<h2 class="anchor anchorWithStickyNavbar_hmm4" id="运行测试">运行测试<a href="#运行测试" class="hash-link" aria-label="运行测试的直接链接" title="运行测试的直接链接" translate="no"></a></h2>
<p>运行项目的测试套件:</p>
<div class="language-bash codeBlockContainer_tLQ_ theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_HMSW"><pre tabindex="0" class="prism-code language-bash codeBlock_HMKa thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_tPUF"><span class="token-line" style="color:#393A34"><span class="token plain">pnpm test</span><br></span></code></pre></div></div>
<h2 class="anchor anchorWithStickyNavbar_hmm4" id="文档开发">文档开发<a href="#文档开发" class="hash-link" aria-label="文档开发的直接链接" title="文档开发的直接链接" translate="no"></a></h2>
<p>如果您想要修改或预览文档,可以使用以下命令:</p>
<div class="language-bash codeBlockContainer_tLQ_ theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_HMSW"><pre tabindex="0" class="prism-code language-bash codeBlock_HMKa thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_tPUF"><span class="token-line" style="color:#393A34"><span class="token plain"># 启动文档开发服务器</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">pnpm docs:start</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"># 构建文档</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">pnpm docs:build</span><br></span></code></pre></div></div>
<p>文档开发服务器默认在 <code>http://localhost:3000</code> 运行。</p>
<h2 class="anchor anchorWithStickyNavbar_hmm4" id="常见问题解决">常见问题解决<a href="#常见问题解决" class="hash-link" aria-label="常见问题解决的直接链接" title="常见问题解决的直接链接" translate="no"></a></h2>
<h3 class="anchor anchorWithStickyNavbar_hmm4" id="依赖安装失败">依赖安装失败<a href="#依赖安装失败" class="hash-link" aria-label="依赖安装失败的直接链接" title="依赖安装失败的直接链接" translate="no"></a></h3>
<p>如果您在安装依赖时遇到问题,可以尝试以下解决方案:</p>
<div class="language-bash codeBlockContainer_tLQ_ theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_HMSW"><pre tabindex="0" class="prism-code language-bash codeBlock_HMKa thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_tPUF"><span class="token-line" style="color:#393A34"><span class="token plain"># 清除 pnpm 缓存</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">pnpm store prune</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"># 重新安装依赖</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">pnpm install --force</span><br></span></code></pre></div></div>
<h3 class="anchor anchorWithStickyNavbar_hmm4" id="开发服务器启动失败">开发服务器启动失败<a href="#开发服务器启动失败" class="hash-link" aria-label="开发服务器启动失败的直接链接" title="开发服务器启动失败的直接链接" translate="no"></a></h3>
<p>如果开发服务器无法启动,请检查:</p>
<ol>
<li>端口 5173 是否被其他应用占用</li>
<li>Node.js 版本是否符合要求</li>
<li>是否所有依赖都已正确安装</li>
</ol>
<p>您可以尝试使用不同的端口启动:</p>
<div class="language-bash codeBlockContainer_tLQ_ theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_HMSW"><pre tabindex="0" class="prism-code language-bash codeBlock_HMKa thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_tPUF"><span class="token-line" style="color:#393A34"><span class="token plain">pnpm dev --port 5174</span><br></span></code></pre></div></div>
<h3 class="anchor anchorWithStickyNavbar_hmm4" id="其他问题">其他问题<a href="#其他问题" class="hash-link" aria-label="其他问题的直接链接" title="其他问题的直接链接" translate="no"></a></h3>
<p>如果您遇到其他问题,请查看项目的 <a href="/upage/faq">常见问题</a> 或在 <a href="https://github.com/halo-dev/upage/issues" target="_blank" rel="noopener noreferrer">GitHub Issues</a> 中搜索相关问题。如果没有找到解决方案,请创建新的 issue。</p></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="row margin-top--sm theme-doc-footer-edit-meta-row"><div class="col"><a href="https://github.com/halo-dev/upage/edit/main/docs/content/content/contributing/development-setup.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__ZHw" 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_CpfT"></div></div></footer></article><nav class="docusaurus-mt-lg pagination-nav" aria-label="文件选项卡"><a class="pagination-nav__link pagination-nav__link--prev" href="/upage/contributing/ways-to-contribute"><div class="pagination-nav__sublabel">上一页</div><div class="pagination-nav__label">贡献方式</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/upage/contributing/code-standards"><div class="pagination-nav__sublabel">下一页</div><div class="pagination-nav__label">代码规范</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_dKl6 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><ul><li><a href="#安装-nodejs" class="table-of-contents__link toc-highlight">安装 Node.js</a></li><li><a href="#安装-pnpm" class="table-of-contents__link toc-highlight">安装 pnpm</a></li></ul></li><li><a href="#克隆仓库" class="table-of-contents__link toc-highlight">克隆仓库</a></li><li><a href="#安装依赖" class="table-of-contents__link toc-highlight">安装依赖</a></li><li><a href="#生成-prisma-客户端" class="table-of-contents__link toc-highlight">生成 Prisma 客户端</a></li><li><a href="#配置环境变量" class="table-of-contents__link toc-highlight">配置环境变量</a></li><li><a href="#启用-logto-认证可选" class="table-of-contents__link toc-highlight">启用 Logto 认证(可选)</a></li><li><a href="#启动开发服务器" class="table-of-contents__link toc-highlight">启动开发服务器</a></li><li><a href="#构建项目" class="table-of-contents__link toc-highlight">构建项目</a></li><li><a href="#运行测试" class="table-of-contents__link toc-highlight">运行测试</a></li><li><a href="#文档开发" class="table-of-contents__link toc-highlight">文档开发</a></li><li><a href="#常见问题解决" class="table-of-contents__link toc-highlight">常见问题解决</a><ul><li><a href="#依赖安装失败" class="table-of-contents__link toc-highlight">依赖安装失败</a></li><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></li></ul></div></div></div></div></main></div></div></div><footer class="theme-layout-footer footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="theme-layout-footer-column col footer__col"><div class="footer__title">文档</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/upage/quick-start">快速开始</a></li><li class="footer__item"><a class="footer__link-item" href="/upage/category/deployment-guide">部署指南</a></li></ul></div><div class="theme-layout-footer-column col footer__col"><div class="footer__title">社区</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://github.com/halo-dev/upage/issues" target="_blank" rel="noopener noreferrer" class="footer__link-item">GitHub Issues<svg width="13.5" height="13.5" aria-label="(opens in new tab)" class="iconExternalLink_xtnk"><use href="#theme-svg-external-link"></use></svg></a></li><li class="footer__item"><a href="https://github.com/halo-dev/upage/discussions" target="_blank" rel="noopener noreferrer" class="footer__link-item">GitHub Discussions<svg width="13.5" height="13.5" aria-label="(opens in new tab)" class="iconExternalLink_xtnk"><use href="#theme-svg-external-link"></use></svg></a></li></ul></div><div class="theme-layout-footer-column col footer__col"><div class="footer__title">更多</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://github.com/halo-dev/upage" target="_blank" rel="noopener noreferrer" class="footer__link-item">GitHub<svg width="13.5" height="13.5" aria-label="(opens in new tab)" class="iconExternalLink_xtnk"><use href="#theme-svg-external-link"></use></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright">Copyright © 2025 凌霞软件. Built with Docusaurus.</div></div></div></footer></div>
</body>
</html>