name: recipe-manager description: 帮助在recipes.js中添加、编辑、验证和管理食谱数据。当用户想要创建新食谱、修改现有食谱、修复食谱格式或验证食谱结构时使用此技能。
食谱管理器技能
您的角色
您专门为CookMode V2管理食谱数据。您帮助用户按照既定模式和架构在recipes.js文件中创建、编辑和维护食谱条目。
何时使用此技能
当用户想要以下操作时,调用此技能:
- 添加新食谱
- 编辑现有食谱
- 修复食谱格式或结构
- 验证食谱数据
- 转换食谱格式
- 批量更新食谱属性
食谱数据架构(结构化对象格式)
标准食谱结构
'recipe-slug': {
name: '显示名称',
category: '主菜' | '配菜' | '汤品' | '甜点',
components: {
'组件名称': [
{
amount: number | string, // 2, 0.5, '1/4', '1/3'
unit: string, // '杯', '汤匙', '盎司', '磅', 等
ingredient: string, // '胡萝卜', '橄榄油'
prep: string // 可选: '切丁', '切碎'
}
]
},
instructions: [
'步骤1说明',
'步骤2说明'
],
notes: '单个字符串' | ['数组', '字符串'],
images: ['url1.jpg', 'url2.jpg'] // 可选
}
必填字段
name(字符串): 食谱的显示名称category(字符串): 其中之一: 主菜, 配菜, 汤品, 甜点components(对象): 按组件分组的配料列表(对象数组)instructions(数组): 分步烹饪说明
可选字段
notes(字符串或数组): 额外提示或信息images(数组): 食谱照片的URL
配料对象结构
必填字段(每个配料)
amount: 数字或分数字符串- 数字:
2,0.5,1.5 - 分数:
'1/2','1/4','1/3'
- 数字:
unit: 计量单位- 体积:
'杯','汤匙','茶匙' - 重量:
'盎司','磅','克','千克' - 计数:
'大个','中等','小个','瓣','整个' - 其他:
'食谱','一小撮','少许'
- 体积:
ingredient: 配料名称- 描述性:
'通用面粉','克里米尼蘑菇' - 简单:
'胡萝卜','大蒜','橄榄油'
- 描述性:
可选字段(每个配料)
prep: 准备说明- 切割:
'切丁','切碎','切片','切块' - 状态:
'软化','融化','室温' - 附加:
'分开使用','根据口味适量添加','推荐使用黑皮诺'
- 切割:
示例
// 简单配料
{ amount: 2, unit: '杯', ingredient: '面粉' }
// 带准备说明
{ amount: 1, unit: '大个', ingredient: '洋葱', prep: '切丁' }
// 分数数量
{ amount: '1/4', unit: '茶匙', ingredient: '盐' }
// 复杂准备说明
{ amount: 5, unit: '大个', ingredient: '胡萝卜', prep: '去皮并切成大块' }
// 非标准单位
{ amount: 1, unit: '食谱', ingredient: '土豆泥', prep: '或配米饭食用' }
缩放逻辑(新增)
对象格式更简单!
function scaleIngredient(ingredientObj, multiplier) {
const scaledAmount = parseAmount(ingredientObj.amount) * multiplier;
return {
...ingredientObj,
amount: scaledAmount
};
}
function parseAmount(amount) {
if (typeof amount === 'number') return amount;
if (amount.includes('/')) {
const [num, den] = amount.split('/').map(Number);
return num / den;
}
return parseFloat(amount);
}
显示格式化
function formatIngredient(obj, orderCount = 1) {
const scaledAmount = parseAmount(obj.amount) * orderCount;
const prep = obj.prep ? `, ${obj.prep}` : '';
return `${scaledAmount.toFixed(2)} ${obj.unit} ${obj.ingredient}${prep}`;
}
// 示例:
// { amount: 2, unit: '杯', ingredient: '面粉' }
// → "2.00 杯 面粉"
// { amount: 1, unit: '大个', ingredient: '洋葱', prep: '切丁' }
// → "1.00 大个 洋葱, 切丁"
// { amount: '1/4', unit: '茶匙', ingredient: '盐', prep: '根据口味适量添加' }
// → "0.25 茶匙 盐, 根据口味适量添加"
类别顺序
食谱按以下类别顺序显示:
- 主菜
- 配菜
- 汤品
- 甜点
定义于 /js/components/RecipeGrid.js:20
备注字段处理
RecipeModal.js 组件以两种格式处理备注:
- 字符串: 渲染为单个段落
- 数组: 将每个项目渲染为单独的段落
// 单个备注
notes: "使用手持搅拌器以获得蓬松质地。"
// 多个备注
notes: [
"使用手持搅拌器以获得蓬松质地。",
"与蘑菇红酒炖菜搭配良好。"
]
组件分组
常见组件模式:
- 简单食谱: 单个组件(例如,‘配料’)
- 复杂食谱: 多个组件(例如,‘面团’, ‘馅料’, ‘浇头’)
- 酱汁: 通常为单独组件(例如,‘基底’, ‘酱汁’)
验证清单
添加/编辑食谱时,请验证:
- [ ] 短链接为kebab-case(小写,连字符)
- [ ] 名称为人类可读
- [ ] 类别为其中之一: 主菜, 配菜, 汤品, 甜点
- [ ] 所有配料均为具有
amount、unit、ingredient字段的对象 - [ ]
amount为数字或分数字符串(‘1/2’, ‘1/4’) - [ ]
unit为字符串(非空) - [ ]
ingredient为字符串(非空) - [ ]
prep为可选字符串 - [ ] 组件对象至少有一个条目
- [ ] 每个组件都有配料对象数组
- [ ] 说明数组至少有一个步骤
- [ ] 备注字段为字符串或数组(非对象)
- [ ] 图像为有效URL(如果提供)
- [ ] 数组/对象中没有尾随逗号
- [ ] 正确的JavaScript语法
常见任务
添加新食谱
- 创建kebab-case短链接
- 遵循架构结构(对象格式)
- 确保所有配料都有
amount、unit、ingredient字段 - 为准备说明添加可选
prep字段 - 添加到适当的类别
- 验证语法
将字符串格式转换为对象格式
旧字符串格式:
'2 杯 通用面粉, 过筛'
新对象格式:
{ amount: 2, unit: '杯', ingredient: '通用面粉', prep: '过筛' }
使用ChatGPT/Claude批量转换:
“将这些食谱配料转换为具有amount、unit、ingredient、prep字段的结构化格式”
转换食谱
从外部来源导入时:
- 提取名称、类别、配料、说明
- 将配料分组到组件中
- 格式化配料,数量在前
- 将步骤转换为数组
- 添加到recipes.js
文件位置
recipes.js: /Users/adamfehse/Documents/gitrepos/cookmodeV2/recipes.js
此文件作为全局window.RECIPES对象加载,并由以下组件访问:
App.js- 传递给RecipeGrid和RecipeModalRecipeGrid.js- 显示卡片和过滤器RecipeModal.js- 显示完整食谱详情
最佳实践
- 保持简单: Pico CSS哲学也适用于数据
- 一致的格式: 遵循现有模式
- 清晰的组件名称: ‘酱汁’, ‘面团’, ‘馅料’而非’组件1’
- 精确的数量: 包括计量单位
- 可操作的说明: 每个步骤应清晰明了
示例:添加新食谱(新对象格式)
'巧克力曲奇': {
name: '巧克力曲奇',
category: '甜点',
components: {
'面团': [
{ amount: 2, unit: '杯', ingredient: '通用面粉' },
{ amount: 1, unit: '茶匙', ingredient: '小苏打' },
{ amount: 0.5, unit: '茶匙', ingredient: '盐' },
{ amount: 1, unit: '杯', ingredient: '黄油', prep: '软化' },
{ amount: 0.75, unit: '杯', ingredient: '砂糖' },
{ amount: 0.75, unit: '杯', ingredient: '红糖' },
{ amount: 2, unit: '大个', ingredient: '鸡蛋' },
{ amount: 2, unit: '茶匙', ingredient: '香草精' }
],
'混合料': [
{ amount: 2, unit: '杯', ingredient: '巧克力豆' }
]
},
instructions: [
'预热烤箱至375°F。',
'在碗中混合面粉、小苏打和盐。',
'将黄油和糖搅打至蓬松。',
'打入鸡蛋和香草精。',
'逐渐拌入面粉混合物。',
'拌入巧克力豆。',
'将圆勺大小的面团放在未抹油的烤盘上。',
'烘烤9-11分钟或直至金黄色。'
],
notes: '如需更耐嚼的曲奇,略微欠烤并在烤盘上冷却。'
}
ChatGPT转换提示
使用此提示转换现有食谱:
将此食谱转换为具有以下结构的JavaScript对象格式:
- amount: 数字或分数字符串('1/2', '1/4')
- unit: 字符串(杯, 汤匙, 茶匙, 盎司, 磅, 等)
- ingredient: 字符串(配料名称)
- prep: 字符串(可选,准备说明如'切丁', '软化')
[在此处粘贴食谱]
记住:保持食谱易于烹饪和维护!