> ## Documentation Index
> Fetch the complete documentation index at: https://docs.shipthing.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 项目结构

> 了解ShipThing应用程序和包的结构。

ShipThing是一个monorepo，这意味着它在一个仓库中包含多个包。这是现代Web应用程序的常见模式，因为它允许您在应用程序的不同部分之间共享代码，并将它们一起管理。

该monorepo由[Turborepo](https://turborepo.com)管理，这是一个用于管理monorepo的工具。它提供了一种简单的方式来管理单个仓库中的多个包，并且专为现代Web应用程序设计。

## 应用程序

ShipThing包含多个构成您项目的[应用程序](/zh/apps)。每个应用程序都是一个独立的应用程序，可以单独部署。

虽然您可以选择在您选择的子域上运行这些应用程序，但每个页面上都列出了推荐的子域。请记得将它们添加到您的[环境变量](/zh/setup/env)中的`NEXT_PUBLIC_APP_URL`、`NEXT_PUBLIC_WEB_URL`和`NEXT_PUBLIC_API_URL`下。

每个应用程序应该是独立的，不依赖于其他应用程序。它们应该在应用程序的根目录下有一个`env.ts`文件，用于组合来自其所依赖包的环境变量。

## 包

ShipThing包含多个在monorepo中共享的[包](/zh/packages)。这些包的目的是将共享代码与主应用程序隔离，使其更易于管理和更新。

此外，它使得更容易为应用程序的不同部分交换实现。例如，`database`包包含与数据库相关的所有内容，包括模式和数据迁移。这使我们能够轻松地更换数据库提供程序或ORM，而不会影响应用程序的其他部分。

每个包应该是独立的，不依赖于其他包。它们应该导出应用程序所需的一切——中间件、钩子、组件，甚至[环境变量](/zh/setup/env)。

## 边界

next-forge使用[Turborepo的边界](https://turborepo.com/docs/reference/boundaries)来确保Turborepo功能正常工作，通过检查包管理器工作区违规。

您可以运行`pnpm run boundaries`来检查任何违规行为。
