# 目录{#directories}

Tuist 遵循 [XDG
基本目录规范](https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html)，在系统中的多个目录中组织文件。这为管理配置、缓存和状态文件提供了一种简洁、标准的方式。

## 支持的环境变量{#supported-environment-variables}

Tuist 既支持标准 XDG 变量，也支持 Tuist 特有的前缀变量。Tuist 专用变量（前缀为`TUIST_` ）优先，允许您将 Tuist
与其他应用程序分开配置。

### 配置目录{#configuration-directory}

**环境变量：**
- `TUIST_XDG_CONFIG_HOME` （优先）。
- `xdg_config_home`

**默认值：** `~/.config/tuist`

**用于：**
- 服务器凭据 (`credentials/{host}.json`)

**例如**
```bash
# Set Tuist-specific config directory
export TUIST_XDG_CONFIG_HOME=/custom/config
tuist auth login

# Or use standard XDG variable
export XDG_CONFIG_HOME=/custom/config
tuist auth login
```

### 缓存目录{#cache-directory}

**环境变量：**
- `TUIST_XDG_CACHE_HOME` （优先）。
- `XDG_CACHE_HOME`

**默认值：** `~/.cache/tuist`

**用于：**
- **插件** ：已下载和编译的插件缓存
- **ProjectDescriptionHelpers** ：编译的项目描述助手
- **清单** ：缓存清单文件
- **项目** ：生成自动化项目缓存
- **编辑项目** ：编辑命令缓存
- **运行** ：测试和构建运行分析数据
- **二进制文件** ：构建工件二进制文件（不可跨环境共享）
- **SelectiveTests** ：选择性测试缓存

**例如**
```bash
# Set Tuist-specific cache directory
export TUIST_XDG_CACHE_HOME=/tmp/tuist-cache
tuist cache

# Or use standard XDG variable
export XDG_CACHE_HOME=/tmp/cache
tuist cache
```

### 国家目录{#state-directory}

**环境变量：**
- `TUIST_XDG_STATE_HOME` （优先使用）
- `XDG_STATE_HOME`

**默认值：** `~/.local/state/tuist`

**用于：**
- **日志** ：日志文件 (`logs/{uuid}.log`)
- **锁** ：身份验证锁文件 (`{handle}.sock`)

**例如**
```bash
# Set Tuist-specific state directory
export TUIST_XDG_STATE_HOME=/var/log/tuist
tuist generate

# Or use standard XDG variable
export XDG_STATE_HOME=/var/log
tuist generate
```

## 优先顺序{#precedence-order}

在确定使用哪个目录时，Tuist 会按以下顺序检查环境变量：

1. **特定于 Tuist 的变量** （例如，`TUIST_XDG_CONFIG_HOME`)
2. **标准 XDG 变量** （如`XDG_CONFIG_HOME`)
3. **默认位置** （例如，`~/.config/tuist`)

这样您就可以
- 使用标准的 XDG 变量来统一组织所有应用程序
- 当需要 Tuist 的不同位置时，使用 Tuist 专用变量覆盖
- 依靠合理的默认设置，无需任何配置

## 常见用例{#common-use-cases}

### 按项目隔离图易斯特{#isolating-tuist-per-project}

您可能需要在每个项目中隔离 Tuist 的缓存和状态：

```bash
# In your project's .envrc (using direnv)
export TUIST_XDG_CACHE_HOME="$PWD/.tuist/cache"
export TUIST_XDG_STATE_HOME="$PWD/.tuist/state"
export TUIST_XDG_CONFIG_HOME="$PWD/.tuist/config"
```

### CI/CD 环境{#ci-cd-environments}

在 CI 环境中，您可能需要使用临时目录：

```yaml
# GitHub Actions example
env:
  TUIST_XDG_CACHE_HOME: /tmp/tuist-cache
  TUIST_XDG_STATE_HOME: /tmp/tuist-state

jobs:
  build:
    runs-on: macos-latest
    steps:
      - uses: actions/checkout@v4
      - run: tuist generate
      - name: Upload logs
        if: failure()
        uses: actions/upload-artifact@v4
        with:
          name: tuist-logs
          path: /tmp/tuist-state/logs/*.log
```

### 使用隔离目录进行调试{#debugging-with-isolated-directories}

在调试问题时，你可能需要一块干净的石板：

```bash
# Create temporary directories for debugging
export TUIST_XDG_CACHE_HOME=$(mktemp -d)
export TUIST_XDG_STATE_HOME=$(mktemp -d)
export TUIST_XDG_CONFIG_HOME=$(mktemp -d)

# Run Tuist commands
tuist generate

# Clean up when done
rm -rf $TUIST_XDG_CACHE_HOME $TUIST_XDG_STATE_HOME $TUIST_XDG_CONFIG_HOME
```
