---
title: 部署规则
description: 通过强大的规则引擎精细控制模组的部署方式——按条件跳过、重定向或规范化文件。
---

## 什么是部署规则？

部署规则让你可以控制单个模组（或一组模组）在部署时的处理方式。告别一刀切的方式，你可以编写如下规则：

- "在 Fabric 实例中跳过此模组"
- "将此数据包重定向到 Paxi 文件夹"
- "规范化此模组的文件名"

规则附加在实例模组列表中的各个包上。

## 规则结构

一条规则由两部分组成：

1. **选择器**——这条规则应用于哪些包？
2. **操作**——对匹配的包执行什么动作？

### 选择器

选择器是布尔表达式，通过包的属性进行匹配：

| 选择器 | 匹配依据 | 示例 |
|----------|-----------|---------|
| `Purl` | 包 URL（精确或部分匹配） | `modrinth:sodium` |
| `Repository` | 来源仓库 | `curseforge` |
| `Tag` | 标签名 | `server-only` |
| `Kind` | 资源类型 | `mod`、`resourcepack`、`shaderpack`、`datapack` |

选择器可以通过布尔运算符组合使用：

- `And`——所有子选择器都必须匹配
- `Or`——任意一个子选择器匹配即可
- `Not`——反转选择器的匹配结果

示例：匹配所有来自 CurseForge 的数据包：
```
And(Repository=curseforge, Kind=datapack)
```

### 操作

| 操作 | 作用 |
|--------|-------------|
| `Skip` | 完全不部署此包 |
| `Normalize` | 将文件重命名为标准化名称 |
| `Destination` | 部署到自定义路径而非默认路径 |

## 常见用例

### 跳过服务端模组

如果你有一些不应出现在客户端实例中的服务端模组：

```
Selector: Tag=server-only
Action: Skip
```

### 为 Paxi 重定向数据包

不同的加载器使用不同的数据包路径。如果你使用 Paxi：

```
Selector: Kind=datapack
Action: Destination → datapacks/
```

### 规范化资源包文件名

资源包文件名通常包含版本号——例如 `Sapphire-v2.1.zip`。当资源包更新到 `Sapphire-v2.2.zip` 时，文件名发生了变化，Minecraft 会忘记你的资源包选择，你每次都必须重新启用它。

规范化通过将文件重命名为一致的名称来解决这个问题：

```
Selector: Purl=modrinth:sapphire
Action: Normalize → Sapphire.zip
```

现在部署的文件名始终保持为 `Sapphire.zip`，无论作者使用了什么版本号。你的资源包不会在每次更新时被取消选择。

## 添加规则

1. 打开你的实例，进入 **Setup** 标签页。
2. 打开实例的 **Rules** 编辑器。
3. 添加新规则：定义选择器和操作。
4. 保存。规则将在下次部署时生效。

## 规则与标签

标签和规则协同工作。典型的工作流程：

1. **为模组添加标签**，使用有意义的标签名（参见 [标签](/docs/managing/tags)）。
2. **编写规则**，针对这些标签进行操作。

这为你提供了一个可维护的系统——修改模组的标签即可，无需逐条编辑规则。
