Ingredients
2026/9/10 13:03:25 网站建设 项目流程

Ingredients

【免费下载链接】platformHuly — All-in-One Project Management Platform (alternative to Linear, Jira, Slack, Notion, Motion)项目地址: https://gitcode.com/GitHub_Trending/platform80/platform

  • 300g Arborio rice
  • 500g mixed mushrooms
  • 1 onion, finely chopped
  • 2 cloves garlic, minced
  • 1 cup white wine
  • 6 cups vegetable stock
  • 2 tbsp nutritional yeast
  • 2 tbsp olive oil
  • Salt and pepper to taste
  • Fresh parsley

Instructions

  1. Sauté mushrooms until golden
  2. Add onion and garlic, cook until soft
  3. Add rice and toast for 2 minutes
  4. Gradually add wine and stock
  5. Cook until rice is creamy
  6. Finish with nutritional yeast

Notes

  • Use a variety of mushrooms for better flavor
  • Keep stock warm while adding
  • Stir constantly for creamy texture
  • Nutritional yeast adds cheesy flavor
**从源码结构的验证点**:官方指南规定"缺少必需 `class` 属性的文件将被跳过"(见 [docs/huly/README.md](https://link.gitcode.com/i/282ed857382a407e7616b634ab9d177a))。而这份菜谱文档并未显式声明 `class`,但从示例工作区的实际布局看,其类型信息由所在空间配置(`Recipes.yaml` 的 `class: card:class:MasterTag`)承载。可以推断:`class` 必需规则主要适用于需要显式声明实体类型的空间(如 Issue、Document),而基于 MasterTag 组织的内容空间在示例中并不要求在每份文档里重复声明。 ## 四、属性从何而来:MasterTag 自定义属性体系 ### 4.1 Recipes 主标签:`Recipes.yaml` [Recipes.yaml](https://link.gitcode.com/i/5242cad8dcf7ff0a1bcd6f967525c218) 定义了 `Recipe` 这一 MasterTag,并声明了一组结构化属性: ```yaml class: card:class:MasterTag title: Recipe properties: - label: cookingTime type: TypeString - label: servings type: TypeNumber - label: difficulty enumOf: "./Difficulty.yaml" # isArray: true # for multiple values - label: category type: TypeString - label: calories type: TypeNumber - label: chef type: TypeString - label: relatedRecipes refTo: "./Recipes.yaml" isArray: true

这段配置揭示了属性系统的几种取值方式:

  • type:标量类型,如TypeStringcookingTimecategorychef)、TypeNumberservingscalories);
  • enumOf:引用枚举定义文件(difficulty./Difficulty.yaml),frontmatter 中只需写枚举值如Medium
  • refTo+isArray:引用其他 Recipe 文档形成文档间引用(relatedRecipes),isArray: true表示允许多值——这与 Mushroom Risotto 中recommendedDesserts的用法同构;
  • 注释还给出了isArray: true用于"多值枚举"的示例。

4.2 Vegan 子标签:Vegan Recipe.yaml

Mushroom Risotto 之所以带有proteinSourceisGlutenFreeallergens这些"素食专属"字段,是因为其所在子目录还定义了一个专属 MasterTag:

class: card:class:MasterTag title: Vegan Recipe properties: - label: proteinSource type: TypeString - label: isGlutenFree type: TypeBoolean - label: allergens type: TypeString

注意这里出现了TypeBoolean:frontmatter 中的isGlutenFree: true即对应此类型。从这一设计可以看出,一份文档可以同时命中多个 MasterTag,其属性会在 frontmatter 中合并体现——Mushroom Risotto 同时是"Recipe"(通用属性)与"Vegan Recipe"(素食属性),这正是 Huly 卡片模型"多标签、多属性集"的导入侧映射。

4.3 更轻量的 Tag:DietaryType.yaml

与 MasterTag 类似但更轻量的是 Tag 定义,DietaryType.yaml 展示了card:class:Tag的写法:

class: card:class:Tag title: DietaryType properties: - label: restrictions type: TypeString - label: allergens type: TypeString

Tag 与 MasterTag 均可声明属性,区别在于标签本身的层级与使用场景(Tag 更贴近"打标",MasterTag 更贴近"结构化实体类型")。

五、枚举字段:Difficulty.yamldifficulty: Medium

Recipes.yamldifficulty属性通过enumOf: "./Difficulty.yaml"指向枚举定义,而 Difficulty.yaml 的完整内容为:

class: core:class:Enum title: Difficulty values: - Easy - Medium - Hard - Expert - Impossible

因此 Mushroom Risotto 的difficulty: Medium就是从这个枚举取值。从格式设计上看:枚举被抽离为独立的core:class:Enum配置文件,从而可以在多个 MasterTag 间复用;导入工具校验时,difficulty字段必须落在Easy / Medium / Hard / Expert / Impossible五个合法值之内,这为导入前的数据质量校验提供了依据。类似的枚举文件同样可以出现在其他空间(如任务状态、优先级等)。

六、文档间关联:RecipeAssociations.yamlrecommendedDesserts

菜谱之间需要"推荐搭配"语义(甜品 ↔ 主菜),统一导入格式通过 Association 文件表达:

# RecipeRelations.yaml class: core:class:Association typeA: "./Recipes.yaml" typeB: "./Recipes.yaml" nameA: recommendedDesserts nameB: recommendedMainDishes type: "N:N" # 1:1, 1:N, N:N

RecipeAssociations.yaml 声明了一个N:N的双向关联:

  • typeA/typeB指向参与关联的实体类型(此处均为Recipes.yaml,即"菜谱 ↔ 菜谱"自关联);
  • nameA: recommendedDesserts:正向字段名,出现在 Mushroom Risotto 的 frontmatter 中;
  • nameB: recommendedMainDishes:反向字段名,出现在被引用文档的 frontmatter 中;
  • type: "N:N"支持1:11:NN:N三种基数。

于是 Mushroom Risotto 里写了:

recommendedDesserts: - ./Chocolate Lava Cake.md

而反向的 Chocolate Lava Cake.md 则相应声明:

recommendedMainDishes: - ./Classic Margherita Pizza.md - ./Vegan/Mushroom Risotto.md

两者通过相对路径互相引用,形成一张可双向导航的菜谱推荐网络。这套"Association 配置文件 + frontmatter 字段"的机制,与 Huly 平台中的对象关联能力一一对应,也是统一导入格式表达复杂业务关系(如文档被哪些任务引用、问题与子问题、审批链等)的通用手段。

七、相对路径引用、子文档与附件

7.1 文档间的相对引用

从上述示例可见,frontmatter 中的关联字段使用./开头的相对路径指向同一空间内的其他文档:

  • ./Chocolate Lava Cake.md—— 指向 Recipes 空间根目录的甜品文档;
  • ./Vegan/Mushroom Risotto.md—— 从空间根目录视角指向 Vegan 子目录下的文档;
  • ./Classic Margherita Pizza.md—— 指向同层的另一份菜谱。

从示例工作区的布局看,这些引用在空间维度上是统一的:无论文档位于哪个子目录,均以空间根为基准书写./相对路径,从而保证"菜谱与菜谱、文档与文档"跨目录也能互相引用。

7.2 子文档:同名字文件夹约定

官方指南 明确约定:子文档/子任务位于与父文档/父任务同名的文件夹中。示例中的对应关系是:

Chocolate Lava Cake.md # 父文档(含 blobs 附件声明) Chocolate Lava Cake/ └── Chocolate Sauce.md # 子文档

同一约定在示例工作区其他空间同样成立:User Guide.md+User Guide/Installation.md1.Project Setup.md+1.Project Setup/2.Configure CI.md,均可作为参照。

7.3 附件(blobs)声明

Chocolate Lava Cake.md 的 frontmatter 展示了附件写法:

blobs: - ./files/cake.png

即通过blobs字段引用空间内files/目录中的资源文件。官方指南同时说明:空间目录中的文件在被 Markdown 内容引用时,可作为附件导入(如架构图、截图、图片素材),这为文档富媒体内容迁移提供了通道。

八、通用文件格式约定速查

综合 docs/huly/README.md 与示例工作区,编写可导入工作区需遵守以下约定:

  • 根目录:包含空间配置文件(*.yaml)与其同名文件夹;
  • 空间配置:全部为 YAML 格式,通过class声明类型——tracker:class:Project(项目)、document:class:Teamspace(文档空间)、documents:class:OrgSpace(受控文档空间)、card:class:MasterTag(自定义卡片标签空间)等;
  • 内容文档:全部为"YAML frontmatter + Markdown 正文";
  • 子文档:放在与父文档同名的文件夹内;
  • 保留文件:名为settings.yaml的文件被保留,不能用作空间配置;
  • class校验:缺少必需class属性的文件将被跳过导入;
  • 空间配置通用字段(以Project Alpha.yaml为例):titleidentifier(项目标识,最多 5 位大写字母/数字且以字母开头)、privateautoJoinownersmembersdescriptiondefaultIssueStatus
  • 任务文档class: tracker:class:Issue,必填titlestatus,可选priorityassigneeestimationremainingTime;任务编号取自文件名数字,与项目identifier组合成ALPHA-1这样的人类可读 ID;状态取值Backlog / Todo / In Progress / Done / Canceled,优先级取值Low / Medium / High / Urgent

九、如何导入:运行 Huly Import Tool

数据目录就绪后,可通过 Docker 运行 import-tool 完成导入(命令来自 官方指南):

docker run \ -e FRONT_URL="https://huly.app" \ -v /path/to/workspace:/data \ hardcoreeng/import-tool:latest \ -- bundle.js import /data \ --user your.email@company.com \ --password yourpassword \ --workspace workspace-id

【免费下载链接】platformHuly — All-in-One Project Management Platform (alternative to Linear, Jira, Slack, Notion, Motion)项目地址: https://gitcode.com/GitHub_Trending/platform80/platform

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询