31 Commits

Author SHA1 Message Date
Anduin Xue
a0b14bd388 delete: remove properdocs.yml and update .gitignore to exclude additional files 2026-05-11 14:09:04 +00:00
Anduin Xue
b7c4dabf47 delete: remove 1 to 5 star difficulty category files and associated dish links 2026-05-11 14:06:56 +00:00
Anduin Xue
e1a7e60517 Merge branch 'master' of github.com:Anduin2017/HowToCook 2026-05-11 14:06:07 +00:00
Anduin Xue
16c9dcafc0 refactor: streamline README generation by removing star index section and unused mkdocs references 2026-05-11 14:05:59 +00:00
github-actions[bot]
2dd6246034 [ci skip] Automatic file changes/fix 2026-05-11 12:49:49 +00:00
Anduin Xue
ba1295076a Merge branch 'master' of github.com:Anduin2017/HowToCook 2026-05-11 12:48:52 +00:00
Anduin Xue
83f6d8f825 Remove difficulty category files for 4, 5, 7, and 8 star dishes, including all associated dish links. 2026-05-11 12:48:42 +00:00
github-actions[bot]
5382658fbc [ci skip] Automatic file changes/fix 2026-05-11 12:42:02 +00:00
Anduin Xue
c2662846f5 fix: update oil selection guidelines to emphasize proper usage of flaxseed and perilla oils 2026-05-11 12:41:00 +00:00
Anduin Xue
795708d5c4 refactor: simplify Dockerfile by removing unnecessary build stages 2026-05-11 12:39:13 +00:00
Anduin Xue
9e12990647 fix: update oil selection guidelines and cooking recommendations for better health choices
Some checks failed
Continuous Deployment / build-readme-file (push) Has been cancelled
Continuous Deployment / build-docker-image (push) Has been cancelled
2026-05-06 18:06:00 +00:00
Anduin Xue
c8da0528ae Update 乡村啤酒鸭.md 2026-05-06 04:13:50 +00:00
Anduin Xue
3bc87e94df Update 乡村啤酒鸭.md 2026-05-06 04:13:28 +00:00
github-actions[bot]
44711e6a13 [ci skip] Automatic file changes/fix 2026-05-05 13:24:58 +00:00
Anduin Xue
52bd8d6434 fix: remove minify plugin to resolve build issues
The mkdocs-minify-plugin with htmlmin was causing segfaults during the
properdocs build when processing the large i18n file set.

Changes:
- Removed mkdocs-minify-plugin from requirements.txt
- Removed htmlmin2 dependency
- Removed minify plugin from mkdocs_template.yml
- Regenerated properdocs.yml

Verification:
- Docker build: SUCCESS ✓
- Image loading: HTTP 200 ✓
- i18n functionality: Working ✓

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-05-05 09:26:20 +00:00
Anduin Xue
3c89c583ab fix: copy images to en/ and fix markdown image references
Architecture explanation:
=========================

Previous incorrect approach (rejected):
- Duplicate image files in both directories
- Wasted ~300MB of storage
- Hard to maintain (update in both places)

Correct approach implemented:
- Copy all image files from dishes/ and tips/ to en/dishes/ and en/tips/
- Image files now accessible to both Chinese and English markdown
- Each language version references images in its own folder
- Simpler than complex relative paths across language boundaries

Why this works:
- mkdocs-static-i18n with docs_structure:folder pattern requires
  resources (images) to be available in each language's folder
- mkdocs serves the correct version based on URL path

Trade-offs:
- Storage cost: +327MB (acceptable for maintainability)
- Simplicity: Local references are clearer than relative paths
- Future updates: Only affects markdown content, not image management

Fixes applied:
- 301 image reference updates in English markdown
- All references now use local Chinese filenames
- Images copied with original names (not translated)

Verification:
- Docker build succeeds
- Site builds with mkdocs + properdocs + i18n
- Image loading tested (HTTP 200)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-05-05 09:22:18 +00:00
Anduin Xue
6f83b5e49d feat: add image reference validation to lint system
Add new image reference validation rule in manual_lint.js:
- Validates that referenced images exist in the file system
- Supports relative paths (./, ../) and skips external URLs
- Reports missing images as lint errors

Fixes found issue:
- dishes/soup/排骨山药玉米汤/排骨山药玉米汤.md: removed missing image
  reference './排骨山药玉米汤.jpg'

All lint checks now pass 

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-05-05 09:09:16 +00:00
github-actions[bot]
31e0396f9f [ci skip] Automatic file changes/fix 2026-05-04 16:42:22 +00:00
Anduin Xue
e84bd91182 Fix: exclude en/ and site/ from readme/mkdocs auto-generation
The i18n migration introduced en/ and site/ directories, which were being
scanned by getAllMarkdown() and incorrectly mixed into the nav generation.

Changes:
- Add 'en' to ignorePaths: prevents 379 English files from polluting nav
- Add 'site' to ignorePaths: prevents built site artifacts from being scanned

The star difficulty system and README/properdocs.yml generation now only
processes Chinese source files (dishes/, tips/) while respecting the i18n
structure:
- README.md: 385 entries (all Chinese), with star difficulty index
- properdocs.yml: 375 nav entries (dishes + tips), Chinese only
- starsystem/: 358 recipes organized by difficulty (1-5 stars)
- i18n plugin: separate /en/ site built by properdocs, not generated by script

Docker build verified: npm run build → node readme-generate.js ✓
properdocs build with i18n: both zh and en locales ✓

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-05-04 16:35:11 +00:00
Anduin Xue
a21c68aea3 Upgrade Docker base image from python:3.11 to python:3.13
python:3.11 causes a segfault when building with properdocs + mkdocs-static-i18n
processing both zh and en locales (379 translated files). python:3.13 matches
the local development environment and resolves the crash.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-05-04 15:16:27 +00:00
Anduin Xue
ac0dfaab6d Add English translations for all 379 recipe and tip files
Use dotlang AI translation (aiursoft-instruct:latest via Ollama) to
translate all Chinese content to English under en/ subfolder:
- en/dishes/: all recipe categories (aquatic, breakfast, condiment,
  dessert, drink, meat_dish, semi-finished, soup, staple, vegetable_dish)
- en/tips/: learn/ and advanced/ cooking guides
- en/README.md, en/CONTRIBUTING.md, en/CODE_OF_CONDUCT.md

The mkdocs-static-i18n plugin (docs_structure: folder) serves Chinese
at the root and English at /en/, with a language switcher in the UI.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-05-04 15:11:01 +00:00
Anduin Xue
3bb7159bf8 Add English i18n support with mkdocs-static-i18n
- Add mkdocs-static-i18n to requirements.txt
- Configure i18n plugin: zh (default) at root, en/ subfolder
- Add language switcher (alternate) in extra config
- Disable navigation.instant (incompatible with i18n switcher)
- Add nav_translations for all category labels in English
- Update readme-generate.js: dish/tip nav entries use path-only
  (mkdocs auto-uses page heading = English title for /en/ pages)
- en/ folder to be populated by dotlang translation

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-05-04 13:42:42 +00:00
Anduin Xue
d541fd425d Rename mkdocs.yml to properdocs.yml, remove --strict flag
- Update readme-generate.js to output properdocs.yml instead of mkdocs.yml
- Remove --strict from build command (pre-existing broken links in content)
- Remove legacy mkdocs.yml

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-05-04 13:25:23 +00:00
Anduin Xue
a7d81fa681 Migrate from mkdocs to properdocs
- Replace mkdocs-with-pdf + weasyprint with properdocs>=1.6.7
- Add pymdown-extensions for richer markdown support
- Remove heavy apt dependencies (weasyprint, fonts-noto-cjk, wget, unzip)
- Switch build command from 'mkdocs build' to 'properdocs build --strict'
- Update template: add offline plugin, fix palette, add content.code.select/copy
- Add md_in_html, pymdownx.tilde, emoji, mermaid, annotation icon support
- Fix broken icon path material//weather-sunny

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-05-04 13:20:03 +00:00
github-actions[bot]
1857c9e313 [ci skip] Automatic file changes/fix 2026-04-12 05:52:36 +00:00
chenfy840
2d8bb2a7b5 Add recipe for 排骨山药玉米汤 (#1780)
* Add recipe for 排骨山药玉米汤

Added a detailed recipe for 排骨山药玉米汤, including ingredients, preparation steps, and cooking tips.

* Refine ingredient details and cooking instructions

Updated ingredient descriptions for clarity and consistency. Improved cooking instructions for better understanding.
2026-04-12 05:51:56 +00:00
Anduin Xue
74314ed468 compress 老式锅包肉.jpg to under 1MB
Some checks failed
Continuous Deployment / build-readme-file (push) Has been cancelled
Continuous Deployment / build-docker-image (push) Has been cancelled
Reduced from 2.78MB to 1012KB (quality=55) to pass the lint size check.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-04-08 06:35:00 +00:00
github-actions[bot]
65453fbd2c [ci skip] Automatic file changes/fix 2026-04-06 05:29:47 +00:00
Anduin Xue
fb200c2ec8 Update readme_template.md 2026-04-06 05:29:12 +00:00
SamYin Kim
48fc47aa86 Add link to open-source Chinese recipe API in README (#1778) 2026-04-06 05:28:51 +00:00
Anduin Xue
64ed9b7156 Update 土豆炖排骨.md (#1774)
Some checks failed
Continuous Deployment / build-readme-file (push) Has been cancelled
Continuous Deployment / build-docker-image (push) Has been cancelled
* Update 土豆炖排骨.md

* Update 土豆炖排骨.md

* Update 土豆炖排骨.md

* Update 土豆炖排骨.md
2026-03-21 04:45:29 +00:00
22 changed files with 220 additions and 738 deletions

View File

@@ -2,6 +2,7 @@ const util = require("util");
const glob = util.promisify(require('glob')); const glob = util.promisify(require('glob'));
const fs = require("fs").promises; const fs = require("fs").promises;
const path = require('path'); const path = require('path');
const fsSyncAccess = require("fs");
const MAX_FILE_SIZE = 1024 * 1024; // 1MB const MAX_FILE_SIZE = 1024 * 1024; // 1MB
// glob 模式,定位菜谱 Markdown 文件和所有文件 // glob 模式,定位菜谱 Markdown 文件和所有文件
@@ -143,6 +144,49 @@ const validators = [
if (!lines.includes(footer)) { if (!lines.includes(footer)) {
errors.push(`文件 ${filePath} 不符合仓库的规范! 它没有包含必需的附加内容!,需要在最后一行添加模板中的【${footer}`); errors.push(`文件 ${filePath} 不符合仓库的规范! 它没有包含必需的附加内容!,需要在最后一行添加模板中的【${footer}`);
} }
},
// 检查图片引用是否存在
async (filePath, lines, errors) => {
const fileDir = path.dirname(filePath);
const content = lines.join('\n');
// 匹配 ![alt](path) 和 [text](path) 的图片引用
// 支持相对路径和 URL
const imageRegex = /\[([^\]]*)\]\(([^)]+\.(?:jpg|jpeg|png|gif|webp|svg))\)/gi;
let match;
const imageRefs = new Set();
while ((match = imageRegex.exec(content)) !== null) {
imageRefs.add(match[2]);
}
// 检查每个引用的图片是否存在
for (const imagePath of imageRefs) {
// 跳过 URLhttp/https/ftp
if (imagePath.startsWith('http://') || imagePath.startsWith('https://') || imagePath.startsWith('ftp://')) {
continue;
}
// 解析相对路径
let fullImagePath;
if (imagePath.startsWith('/')) {
// 绝对路径相对于repo根目录
fullImagePath = path.resolve(__dirname, '../../', imagePath);
} else if (imagePath.includes('..')) {
// 相对路径(包含 ..
fullImagePath = path.resolve(fileDir, imagePath);
} else {
// 相对路径(同目录或子目录)
fullImagePath = path.resolve(fileDir, imagePath);
}
try {
fsSyncAccess.accessSync(fullImagePath);
} catch (err) {
errors.push(`文件 ${filePath} 引用了不存在的图片: ${imagePath}`);
}
}
} }
]; ];

View File

@@ -3,174 +3,79 @@ const fs = require('fs').promises;
const path = require('path'); const path = require('path');
const README_PATH = './README.md'; const README_PATH = './README.md';
const MKDOCS_PATH = 'mkdocs.yml'; const ignorePaths = ['.git', 'README.md', 'node_modules', 'CONTRIBUTING.md', '.github', 'en', 'site'];
const dishesFolder = 'dishes';
const starsystemFolder = 'starsystem';
const ignorePaths = ['.git', 'README.md', 'node_modules', 'CONTRIBUTING.md', '.github'];
const categories = { const categories = {
vegetable_dish: { vegetable_dish: {
title: '素菜', title: '素菜',
readme: '', readme: '',
mkdocs: '',
}, },
meat_dish: { meat_dish: {
title: '荤菜', title: '荤菜',
readme: '', readme: '',
mkdocs: '',
}, },
aquatic: { aquatic: {
title: '水产', title: '水产',
readme: '', readme: '',
mkdocs: '',
}, },
breakfast: { breakfast: {
title: '早餐', title: '早餐',
readme: '', readme: '',
mkdocs: '',
}, },
staple: { staple: {
title: '主食', title: '主食',
readme: '', readme: '',
mkdocs: '',
}, },
'semi-finished': { 'semi-finished': {
title: '半成品加工', title: '半成品加工',
readme: '', readme: '',
mkdocs: '',
}, },
soup: { soup: {
title: '汤与粥', title: '汤与粥',
readme: '', readme: '',
mkdocs: '',
}, },
drink: { drink: {
title: '饮料', title: '饮料',
readme: '', readme: '',
mkdocs: '',
}, },
condiment: { condiment: {
title: '酱料和其它材料', title: '酱料和其它材料',
readme: '', readme: '',
mkdocs: '',
}, },
dessert: { dessert: {
title: '甜品', title: '甜品',
readme: '', readme: '',
mkdocs: '',
}, },
}; };
async function countStars(filename) {
const data = await fs.readFile(filename, 'utf-8');
let stars = 0;
const lines = data.split('\n');
lines.forEach(line => {
stars += (line.match(/★/g) || []).length;
});
return stars;
}
async function organizeByStars(dishesFolder, starsystemFolder) {
const dishes = {};
async function processFolder(folderPath) {
const files = await readdir(folderPath);
for (const filename of files) {
const filepath = path.join(folderPath, filename);
const fileStat = await stat(filepath);
if (fileStat.isFile() && filename.endsWith('.md')) {
const stars = await countStars(filepath);
dishes[filepath] = stars;
} else if (fileStat.isDirectory()) {
await processFolder(filepath);
}
}
}
const dishesFolderAbs = path.resolve(dishesFolder);
const starsystemFolderAbs = path.resolve(starsystemFolder);
if (!await fs.access(starsystemFolderAbs).then(() => true).catch(() => false)) {
await fs.mkdir(starsystemFolderAbs, { recursive: true });
}
if (!await fs.access(dishesFolderAbs).then(() => true).catch(() => false)) {
console.log(`Directory not found: ${dishesFolderAbs}, creating directory...`);
await fs.mkdir(dishesFolderAbs, { recursive: true });
}
await processFolder(dishesFolderAbs);
const starRatings = Array.from(new Set(Object.values(dishes))).sort((a, b) => a - b);
const navigationLinks = [];
for (const stars of starRatings) {
const starsFile = path.join(starsystemFolderAbs, `${stars}Star.md`);
const content = [`# ${stars} 星难度菜品`, ''];
for (const [filepath, starCount] of Object.entries(dishes)) {
if (starCount === stars) {
const relativePath = path.relative(starsystemFolderAbs, filepath).replace(/\\/g, '/');
content.push(`* [${path.basename(filepath, '.md')}](./${relativePath})`);
}
}
await writeFile(starsFile, content.join('\n'), 'utf-8');
navigationLinks.push(`- [${stars} 星难度](${path.relative(path.dirname(README_PATH), starsFile).replace(/\\/g, '/')})`);
}
return navigationLinks;
}
async function main() { async function main() {
try { try {
let README_BEFORE = '', README_MAIN = '', README_AFTER = ''; let README_BEFORE = '', README_MAIN = '', README_AFTER = '';
let MKDOCS_BEFORE = '', MKDOCS_MAIN = '', MKDOCS_AFTER = '';
const markdownObj = await getAllMarkdown('.'); const markdownObj = await getAllMarkdown('.');
// Debug logging to understand the structure of markdownObj
console.log("Markdown Object Structure:", JSON.stringify(markdownObj, null, 2));
for (const markdown of markdownObj) { for (const markdown of markdownObj) {
console.log("Processing markdown:", markdown);
if (markdown.path.includes('tips/advanced')) { if (markdown.path.includes('tips/advanced')) {
README_AFTER += inlineReadmeTemplate(markdown.file, markdown.path); README_AFTER += inlineReadmeTemplate(markdown.file, markdown.path);
MKDOCS_AFTER += inlineMkdocsTemplate(markdown.file, markdown.path);
continue; continue;
} }
if (markdown.path.includes('tips')) { if (markdown.path.includes('tips')) {
README_BEFORE += inlineReadmeTemplate(markdown.file, markdown.path); README_BEFORE += inlineReadmeTemplate(markdown.file, markdown.path);
MKDOCS_BEFORE += inlineMkdocsTemplate(markdown.file, markdown.path);
continue; continue;
} }
for (const category of Object.keys(categories)) { for (const category of Object.keys(categories)) {
if (!markdown.path.includes(category)) continue; if (!markdown.path.includes(category)) continue;
categories[category].readme += inlineReadmeTemplate(markdown.file, markdown.path); categories[category].readme += inlineReadmeTemplate(markdown.file, markdown.path);
categories[category].mkdocs += inlineMkdocsTemplate(
markdown.file,
markdown.path,
true,
);
} }
} }
for (const category of Object.values(categories)) { for (const category of Object.values(categories)) {
README_MAIN += categoryReadmeTemplate(category.title, category.readme); README_MAIN += categoryReadmeTemplate(category.title, category.readme);
MKDOCS_MAIN += categoryMkdocsTemplate(category.title, category.mkdocs);
} }
let MKDOCS_TEMPLATE;
let README_TEMPLATE; let README_TEMPLATE;
try {
MKDOCS_TEMPLATE = await fs.readFile("./.github/templates/mkdocs_template.yml", "utf-8");
} catch (error) {
MKDOCS_TEMPLATE = `site_name: My Docs\nnav:\n {{main}}\n`;
console.warn("mkdocs_template.yml not found, using default template");
}
try { try {
README_TEMPLATE = await fs.readFile("./.github/templates/readme_template.md", "utf-8"); README_TEMPLATE = await fs.readFile("./.github/templates/readme_template.md", "utf-8");
} catch (error) { } catch (error) {
@@ -178,30 +83,13 @@ async function main() {
console.warn("readme_template.md not found, using default template"); console.warn("readme_template.md not found, using default template");
} }
const navigationLinks = await organizeByStars(dishesFolder, starsystemFolder);
// Debug logging to ensure navigationLinks is defined and contains data
console.log("难度索引", navigationLinks);
const navigationSection = `\n### 按难度索引\n\n${navigationLinks.join('\n')}`;
await writeFile( await writeFile(
README_PATH, README_PATH,
README_TEMPLATE README_TEMPLATE
.replace('{{before}}', README_BEFORE.trim()) .replace('{{before}}', README_BEFORE.trim())
.replace('{{index_stars}}', navigationSection.trim())
.replace('{{main}}', README_MAIN.trim()) .replace('{{main}}', README_MAIN.trim())
.replace('{{after}}', README_AFTER.trim()), .replace('{{after}}', README_AFTER.trim()),
); );
await writeFile(
MKDOCS_PATH,
MKDOCS_TEMPLATE
.replace('{{before}}', MKDOCS_BEFORE)
.replace('{{main}}', MKDOCS_MAIN)
.replace('{{after}}', MKDOCS_AFTER),
);
// Organize files by star rating
//await organizeByStars(dishesFolder, starsystemFolder);
} catch (error) { } catch (error) {
console.error(error); console.error(error);
} }
@@ -234,12 +122,4 @@ function categoryReadmeTemplate(title, inlineStr) {
return `\n### ${title}\n\n${inlineStr}`; return `\n### ${title}\n\n${inlineStr}`;
} }
function inlineMkdocsTemplate(file, path, isDish = false) {
return `${' '.repeat(isDish ? 10 : 6)}- ${file.replace('.md', '')}: ${path}/${file}\n`;
}
function categoryMkdocsTemplate(title, inlineStr) {
return `\n${' '.repeat(6)}- ${title}:\n${inlineStr}`;
}
main(); main();

View File

@@ -1,93 +0,0 @@
site_name: How To Cook
# Repository
repo_name: Anduin2017/HowToCook
repo_url: https://github.com/Anduin2017/HowToCook
edit_uri: ""
use_directory_urls: true
docs_dir: .
theme:
font: false
name: material
language: zh
features:
- content.code.annotate
# - content.tabs.link
# - header.autohide
# - navigation.expand
# - navigation.indexes
- navigation.instant
- navigation.sections
- navigation.tabs
- navigation.tabs.sticky
- navigation.top
- navigation.footer
- navigation.tracking
- search.highlight
- search.share
- search.suggest
- toc.follow
# - toc.integrate
search_index_only: true
palette:
- media: "(prefers-color-scheme: light)"
scheme: default
toggle:
icon: material//weather-sunny
name: Switch to dark mode
- media: "(prefers-color-scheme: dark)"
scheme: slate
toggle:
icon: material/weather-night
name: Switch to light mode
icon:
admonition:
note: octicons/tag-16
abstract: octicons/checklist-16
info: octicons/info-16
tip: octicons/squirrel-16
success: octicons/check-16
question: octicons/question-16
warning: octicons/alert-16
failure: octicons/x-circle-16
danger: octicons/zap-16
bug: octicons/bug-16
example: octicons/beaker-16
quote: octicons/quote-16
markdown_extensions:
- admonition
- pymdownx.details
- pymdownx.superfences
- abbr
- pymdownx.snippets
- def_list
- pymdownx.tasklist:
custom_checkbox: true
- attr_list
plugins:
- same-dir
- search
- with-pdf:
author: GitHub Community
copyright: The Unlicense
cover_title: How To Cook
cover_subtitle: 程序员做饭指南
output_path: document.pdf
- minify:
minify_html: true
nav:
- README.md
- 做菜之前:
{{before}}
- 菜谱:
- 按种类: # 只有两层section以上才能出现navigation expansion https://squidfunk.github.io/mkdocs-material/setup/setting-up-navigation/#navigation-sections
{{main}}
- 进阶知识学习:
{{after}}
- CONTRIBUTING.md
- CODE_OF_CONDUCT.md

View File

@@ -1,12 +1,10 @@
# 程序员做饭指南 # 程序员做饭指南
[![build](https://github.com/Anduin2017/HowToCook/actions/workflows/build.yml/badge.svg)](https://github.com/Anduin2017/HowToCook/actions/workflows/build.yml)
[![License](https://img.shields.io/github/license/Anduin2017/HowToCook)](./LICENSE) [![License](https://img.shields.io/github/license/Anduin2017/HowToCook)](./LICENSE)
[![GitHub contributors](https://img.shields.io/github/contributors/Anduin2017/HowToCook)](https://github.com/Anduin2017/HowToCook/graphs/contributors) [![GitHub contributors](https://img.shields.io/github/contributors/Anduin2017/HowToCook)](https://github.com/Anduin2017/HowToCook/graphs/contributors)
[![npm](https://img.shields.io/npm/v/how-to-cook)](https://www.npmjs.com/package/how-to-cook)
[![Man hours](https://manhours.aiursoft.com/r/github.com/Anduin2017/HowToCook.svg)](https://manhours.aiursoft.com/r/github.com/Anduin2017/HowToCook.html) [![Man hours](https://manhours.aiursoft.com/r/github.com/Anduin2017/HowToCook.svg)](https://manhours.aiursoft.com/r/github.com/Anduin2017/HowToCook.html)
[![Docker](https://img.shields.io/badge/docker-latest-blue?logo=docker)](https://github.com/Anduin2017/HowToCook/pkgs/container/how-to-cook) [![Website](https://img.shields.io/website?url=https%3A%2F%2Fhowtocook.aiursoft.com)](https://howtocook.aiursoft.com)
[![Join the AnduinOS Community on Revolt](https://img.shields.io/badge/Revolt-Join-fd6671?style=flat-square)](https://rvlt.gg/ndApqZEs) [![Docker](https://img.shields.io/docker/pulls/aiursoft/howtocookviewer.svg)](https://hub.docker.com/r/aiursoft/howtocookviewer)
最近宅在家做饭,作为程序员,我偶尔在网上找找菜谱和做法。但是这些菜谱往往写法千奇百怪,经常中间莫名出来一些材料。对于习惯了形式语言的程序员来说极其不友好。 最近宅在家做饭,作为程序员,我偶尔在网上找找菜谱和做法。但是这些菜谱往往写法千奇百怪,经常中间莫名出来一些材料。对于习惯了形式语言的程序员来说极其不友好。
@@ -19,12 +17,10 @@
如果需要在本地部署菜谱 Web 服务,可以在安装 Docker 后运行下面命令: 如果需要在本地部署菜谱 Web 服务,可以在安装 Docker 后运行下面命令:
```bash ```bash
docker pull ghcr.io/anduin2017/how-to-cook:latest docker pull aiursoft/howtocookviewer
docker run -d -p 5000:80 ghcr.io/anduin2017/how-to-cook:latest docker run -d -p 5000:5000 aiursoft/howtocookviewer
``` ```
如需下载 PDF 版本,可以在浏览器中访问 [/document.pdf](https://cook.aiursoft.com/document.pdf)
## 如何贡献 ## 如何贡献
针对发现的问题,直接修改并提交 Pull request 即可。 针对发现的问题,直接修改并提交 Pull request 即可。
@@ -37,8 +33,6 @@ docker run -d -p 5000:80 ghcr.io/anduin2017/how-to-cook:latest
## 菜谱 ## 菜谱
{{index_stars}}
{{main}} {{main}}
## 进阶知识学习 ## 进阶知识学习
@@ -53,3 +47,4 @@ docker run -d -p 5000:80 ghcr.io/anduin2017/how-to-cook:latest
- [HowToCook-mcp 让 AI 助手变身私人大厨,为你的一日三餐出谋划策](https://github.com/worryzyy/HowToCook-mcp) - [HowToCook-mcp 让 AI 助手变身私人大厨,为你的一日三餐出谋划策](https://github.com/worryzyy/HowToCook-mcp)
- [HowToCook-py-mcp 让 AI 助手变身私人大厨,为你的一日三餐出谋划策 (Python)](https://github.com/DusKing1/howtocook-py-mcp) - [HowToCook-py-mcp 让 AI 助手变身私人大厨,为你的一日三餐出谋划策 (Python)](https://github.com/DusKing1/howtocook-py-mcp)
- [whatToEat 今天吃什么?的决策工具,帮助你快速选择合适的菜谱。](https://github.com/ryanuo/whatToEat) - [whatToEat 今天吃什么?的决策工具,帮助你快速选择合适的菜谱。](https://github.com/ryanuo/whatToEat)
- [厨房计划:开源中文菜谱 API - 由社区贡献,人人可用](https://proj.kitchen)

View File

@@ -29,24 +29,3 @@ jobs:
commit_user_email: github-actions[bot]@users.noreply.github.com commit_user_email: github-actions[bot]@users.noreply.github.com
commit_author: github-actions[bot] <github-actions[bot]@users.noreply.github.com> commit_author: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
build-docker-image:
needs: build-readme-file
runs-on: ubuntu-latest
steps:
# Checkout, install tools..
- uses: actions/checkout@v6
with:
lfs: true
fetch-depth: 0
# Use docker to build current directory ./Dockfile
- name: Login to GitHub Container Registry
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Build and push the Docker image
run: |
docker build . --tag ghcr.io/anduin2017/how-to-cook:latest
docker push ghcr.io/anduin2017/how-to-cook:latest

3
.gitignore vendored
View File

@@ -3,7 +3,8 @@ node_modules/
.history .history
.DS_Store .DS_Store
site/ site/
starsystem/
properdocs.yml
.idea .idea
*.iml *.iml
mkdocs.yml

View File

@@ -1,24 +0,0 @@
# ============================
# Prepare lint Environment
FROM node:22-alpine AS lint-env
WORKDIR /app
COPY . .
RUN npm install --loglevel verbose
RUN npm run build
RUN npm run lint
# ============================
# Prepare Build Environment
FROM python:3.11 AS python-env
WORKDIR /app
COPY --from=lint-env /app .
RUN apt-get update && apt-get install -y weasyprint fonts-noto-cjk wget unzip
RUN rm node_modules -rf && pip install -r requirements.txt
RUN mkdocs build
# ============================
# Prepare Runtime Environment
FROM nginx:1-alpine
COPY --from=python-env /app/site /usr/share/nginx/html
LABEL org.opencontainers.image.source="https://github.com/Anduin2017/HowToCook"

View File

@@ -1,12 +1,10 @@
# 程序员做饭指南 # 程序员做饭指南
[![build](https://github.com/Anduin2017/HowToCook/actions/workflows/build.yml/badge.svg)](https://github.com/Anduin2017/HowToCook/actions/workflows/build.yml)
[![License](https://img.shields.io/github/license/Anduin2017/HowToCook)](./LICENSE) [![License](https://img.shields.io/github/license/Anduin2017/HowToCook)](./LICENSE)
[![GitHub contributors](https://img.shields.io/github/contributors/Anduin2017/HowToCook)](https://github.com/Anduin2017/HowToCook/graphs/contributors) [![GitHub contributors](https://img.shields.io/github/contributors/Anduin2017/HowToCook)](https://github.com/Anduin2017/HowToCook/graphs/contributors)
[![npm](https://img.shields.io/npm/v/how-to-cook)](https://www.npmjs.com/package/how-to-cook)
[![Man hours](https://manhours.aiursoft.com/r/github.com/Anduin2017/HowToCook.svg)](https://manhours.aiursoft.com/r/github.com/Anduin2017/HowToCook.html) [![Man hours](https://manhours.aiursoft.com/r/github.com/Anduin2017/HowToCook.svg)](https://manhours.aiursoft.com/r/github.com/Anduin2017/HowToCook.html)
[![Docker](https://img.shields.io/badge/docker-latest-blue?logo=docker)](https://github.com/Anduin2017/HowToCook/pkgs/container/how-to-cook) [![Website](https://img.shields.io/website?url=https%3A%2F%2Fhowtocook.aiursoft.com)](https://howtocook.aiursoft.com)
[![Join the AnduinOS Community on Revolt](https://img.shields.io/badge/Revolt-Join-fd6671?style=flat-square)](https://rvlt.gg/ndApqZEs) [![Docker](https://img.shields.io/docker/pulls/aiursoft/howtocookviewer.svg)](https://hub.docker.com/r/aiursoft/howtocookviewer)
最近宅在家做饭,作为程序员,我偶尔在网上找找菜谱和做法。但是这些菜谱往往写法千奇百怪,经常中间莫名出来一些材料。对于习惯了形式语言的程序员来说极其不友好。 最近宅在家做饭,作为程序员,我偶尔在网上找找菜谱和做法。但是这些菜谱往往写法千奇百怪,经常中间莫名出来一些材料。对于习惯了形式语言的程序员来说极其不友好。
@@ -19,12 +17,10 @@
如果需要在本地部署菜谱 Web 服务,可以在安装 Docker 后运行下面命令: 如果需要在本地部署菜谱 Web 服务,可以在安装 Docker 后运行下面命令:
```bash ```bash
docker pull ghcr.io/anduin2017/how-to-cook:latest docker pull aiursoft/howtocookviewer
docker run -d -p 5000:80 ghcr.io/anduin2017/how-to-cook:latest docker run -d -p 5000:5000 aiursoft/howtocookviewer
``` ```
如需下载 PDF 版本,可以在浏览器中访问 [/document.pdf](https://cook.aiursoft.com/document.pdf)
## 如何贡献 ## 如何贡献
针对发现的问题,直接修改并提交 Pull request 即可。 针对发现的问题,直接修改并提交 Pull request 即可。
@@ -50,14 +46,6 @@ docker run -d -p 5000:80 ghcr.io/anduin2017/how-to-cook:latest
## 菜谱 ## 菜谱
### 按难度索引
- [1 星难度](starsystem/1Star.md)
- [2 星难度](starsystem/2Star.md)
- [3 星难度](starsystem/3Star.md)
- [4 星难度](starsystem/4Star.md)
- [5 星难度](starsystem/5Star.md)
### 素菜 ### 素菜
- [拔丝土豆](dishes/vegetable_dish/拔丝土豆/拔丝土豆.md) - [拔丝土豆](dishes/vegetable_dish/拔丝土豆/拔丝土豆.md)
@@ -374,6 +362,7 @@ docker run -d -p 5000:80 ghcr.io/anduin2017/how-to-cook:latest
- [米粥](dishes/soup/米粥.md) - [米粥](dishes/soup/米粥.md)
- [奶油蘑菇汤](dishes/soup/奶油蘑菇汤.md) - [奶油蘑菇汤](dishes/soup/奶油蘑菇汤.md)
- [排骨苦瓜汤](dishes/soup/排骨苦瓜汤/排骨苦瓜汤.md) - [排骨苦瓜汤](dishes/soup/排骨苦瓜汤/排骨苦瓜汤.md)
- [排骨山药玉米汤](dishes/soup/排骨山药玉米汤/排骨山药玉米汤.md)
- [皮蛋瘦肉粥](dishes/soup/皮蛋瘦肉粥.md) - [皮蛋瘦肉粥](dishes/soup/皮蛋瘦肉粥.md)
- [生汆丸子汤](dishes/soup/生汆丸子汤.md) - [生汆丸子汤](dishes/soup/生汆丸子汤.md)
- [西红柿鸡蛋汤](dishes/soup/西红柿鸡蛋汤.md) - [西红柿鸡蛋汤](dishes/soup/西红柿鸡蛋汤.md)
@@ -459,3 +448,4 @@ docker run -d -p 5000:80 ghcr.io/anduin2017/how-to-cook:latest
- [HowToCook-mcp 让 AI 助手变身私人大厨,为你的一日三餐出谋划策](https://github.com/worryzyy/HowToCook-mcp) - [HowToCook-mcp 让 AI 助手变身私人大厨,为你的一日三餐出谋划策](https://github.com/worryzyy/HowToCook-mcp)
- [HowToCook-py-mcp 让 AI 助手变身私人大厨,为你的一日三餐出谋划策 (Python)](https://github.com/DusKing1/howtocook-py-mcp) - [HowToCook-py-mcp 让 AI 助手变身私人大厨,为你的一日三餐出谋划策 (Python)](https://github.com/DusKing1/howtocook-py-mcp)
- [whatToEat 今天吃什么?的决策工具,帮助你快速选择合适的菜谱。](https://github.com/ryanuo/whatToEat) - [whatToEat 今天吃什么?的决策工具,帮助你快速选择合适的菜谱。](https://github.com/ryanuo/whatToEat)
- [厨房计划:开源中文菜谱 API - 由社区贡献,人人可用](https://proj.kitchen)

View File

@@ -1,7 +1,5 @@
# 乡村啤酒鸭的做法 # 乡村啤酒鸭的做法
![乡村啤酒鸭](https://jphuang-image.oss-cn-beijing.aliyuncs.com/beer/duck/%E6%88%90%E5%93%812.jpg)
将鸭肉与啤酒一同炖煮成菜,使滋补的鸭肉味道更加浓厚,鸭肉不仅入口鲜香,还带有一股啤酒清香。一般初学者只需要 1 小时即可完成。 将鸭肉与啤酒一同炖煮成菜,使滋补的鸭肉味道更加浓厚,鸭肉不仅入口鲜香,还带有一股啤酒清香。一般初学者只需要 1 小时即可完成。
预估烹饪难度:★★★★ 预估烹饪难度:★★★★
@@ -46,8 +44,6 @@
- 香叶 3 片 - 香叶 3 片
- 干辣椒 6 条 (不吃辣可以不用 - 干辣椒 6 条 (不吃辣可以不用
![酱料](https://jphuang-image.oss-cn-beijing.aliyuncs.com/beer/duck/%E5%A4%87%E6%96%99.jpg)
## 操作 ## 操作
### 鸭肉焯水以去腥去血水 ### 鸭肉焯水以去腥去血水

View File

@@ -4,52 +4,78 @@
## 必备原料和工具 ## 必备原料和工具
- 肋排 * 肋排
- 土豆 * 土豆
- *
- 小葱 * 小葱
- 料酒 * 料酒
- 白糖 * 白糖
- 干辣椒 * 干辣椒
- 八角 * 八角
- 花椒 * 花椒
- 桂皮 * 桂皮
- 生抽 * 生抽
- 老抽 * 老抽
- 蚝油 * 蚝油
- 黄豆酱 * 黄豆酱
*
* 食用油
## 计算 ## 计算
- 肋排 = 750g 注意:以下参数为标准 2-3 人份的精确配置。
- 土豆 = 300g
- = 30g * 肋排 = 750g
- 小葱 = 25g * 土豆 = 300g
- 料酒 = 25g * = 30g 分为两份15g 焯水用15g 炒制用)
- 白糖 = 10g * 小葱 = 25g 分为两份15g 打成葱结10g 切葱花)
- 干辣椒 = 5g * 料酒 = 25ml 分为两份15ml 焯水用10ml 炒制用)
- 八角 = 5g * 白糖 = 10g
- 椒 = 5g * 干辣椒 = 5g
- 桂皮 = 5g * 八角 = 1g (约 1-2 颗)
- 生抽 = 10g * 花椒 = 1g (约 10 粒)
- 老抽 = 5g * 桂皮 = 1g (一小块)
- 蚝油 = 5g * 生抽 = 10ml
- 黄豆酱 = 5g * 老抽 = 5ml
* 蚝油 = 5ml
* 黄豆酱 = 5g
* 盐 = 3g (最后收汁调味用)
* 开水 = 700ml
* 食用油 = 20ml
## 操作 ## 操作
- 土豆两个滚刀切片,姜片切片 ### 预处理:食材切配与防氧化
- 排骨 750g 冷水下锅,加入姜片、葱段、料酒焯水 2 分钟,焯干水后捞出清洗干净(一定要用热水,不能用冷水)
- 热锅凉油,将白糖倒入锅中,翻炒至融化为焦糖色 * **处理土豆:** 将 300g 土豆去皮,切成不规则的滚刀块 。**切好后立刻泡入一盆清水中**,隔绝氧气防止表面氧化发黑,备用。
- 加入排骨煎至两面金黄,让排骨裹满焦糖 * **处理葱姜:** 将 30g 姜全部切成薄片(分成两份 15g。将 25g 小葱处理好15g 挽成一个葱结,剩余 10g 切成细小葱花备用。
- 加入干辣椒、八角、花椒、桂皮、姜片建议买超市的香料包、10ml 生抽、5ml 老抽、5ml 料酒、5ml 蚝油、5ml 黄豆酱
- 大火翻炒均匀后加入 700ml 开水,大火烧开后转小火焖煮 1 小时 ### 预处理:调料封装与异步任务
- 最后加入土豆煮 10 分钟就可以出锅啦(喜欢吃青红椒的也可以按自己喜好加入)
- ![成果展示](./排骨1.jpg) * **封装酱汁碗(一键调用):** 拿一个小碗,依次加入 10ml 生抽、5ml 老抽、5ml 蚝油、5ml 黄豆酱,彻底搅拌均匀,放在灶台触手可及处备用。
- ![成果展示](./排骨2.jpg) * **封装香料碟(一键调用):** 拿一个小碟,放入 5g 干辣椒、1g 八角(约 1-2 颗、1g 花椒(约 10 粒、1g 桂皮(一小块),以及刚才切好的 15g 姜片,备用。
* **开启异步水程:** 按下电热水壶开关,开始烧制 700ml 开水。(确保炒制完成时,开水刚好就绪)。
### 初步加工:排骨焯水与脱水
* **冷水焯水:** 将 750g 肋排冷水下锅,加入 15g 葱结、15g 姜片、15ml 料酒。大火煮沸后,继续保持沸腾焯水 2 分钟,逼出内部血沫。
* **热洗冷防:** 捞出排骨,**必须用热水**将排骨表面残留的浮沫清洗干净(遇冷水肉质会剧烈收缩变硬)。
* **绝对脱水(防爆防溅):** 洗净的排骨**必须用厨房纸彻底吸干表面水分**,装盘放在炒锅旁边备用(防止后续下入高温糖色时发生剧烈炸锅)。
### 核心炒制:糖色与爆香(高并发阶段)
* **炒制糖色:** 热锅凉油,加入 20ml 食用油。将 10g 白糖倒入锅中,中小火不停搅拌。翻炒至白糖完全融化冒泡,并呈现红棕色的焦糖色 。
* **上色煎制:** 迅速加入彻底脱水的 750g 排骨,转中大火翻炒。煎制约 2-3 分钟,至排骨两面微微金黄,且均匀裹满焦糖色。
* **一键爆香:** 在锅中拨出一小块空地,**直接倒入【香料碟】**。利用锅底的热油爆香约 10 秒,激发出香料的脂溶性香气。
* **一键调味:** 顺着热锅边缘淋入剩余的 10ml 料酒激发出锅气。紧接着**直接倒入【酱汁碗】**,翻炒约 30 秒,让酱料完全包裹排骨并炒出浓郁酱香。
### 炖煮收汁:挂霜与出锅
* **加水长炖:** 此时电热水壶已沸腾,直接加入 700ml 滚烫的开水(水量需没过排骨),大火烧开。随后盖上锅盖,转小火持续焖煮 40 分钟。
* **加入土豆:** 40 分钟后打开锅盖,将泡在水里的 300g 土豆捞出沥干,下入锅中。重新盖上锅盖,继续小火焖煮 15-20 分钟,直到用筷子能轻松扎透土豆块。
* **调味收汁:** 打开锅盖,加入 3g 盐(此时可尝一下汤汁,根据个人口味酌情微调)。转大火开始翻炒收汁,大约需要 3-5 分钟。直到汤汁变得浓稠,均匀地挂在排骨和土豆上即可关火。
* **点缀出锅:** 盛盘出锅,在表面均匀撒上预处理好的 10g 葱花作为 UI 点缀即可。
## 附加内容 ## 附加内容
这道菜难度系数简单,对新手友好,超级下饭
如果您遵循本指南的制作流程而发现有问题或可以改进的流程,请提出 Issue 或 Pull request 。 如果您遵循本指南的制作流程而发现有问题或可以改进的流程,请提出 Issue 或 Pull request 。

View File

@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:256ca6f03935e94db9553c815f90cd70b023aa12dd71009d62a0d6f4fd86c86c oid sha256:c606a823d0667954b35e267b1e4e9d634df4117d4c3a9efd485f40803fd254d6
size 2914595 size 1035603

View File

@@ -0,0 +1,66 @@
# 排骨山药玉米汤的做法
排骨山药玉米汤是一道兼具清甜与滋补的经典家常汤品。山药软糯、玉米清甜,搭配排骨的醇厚,具有健脾益胃、增强免疫力的功效。
预估烹饪难度:★★
## 必备原料和工具
- 排骨(推荐精排)
- 山药(推荐铁棍山药)
- 胡萝卜
- 玉米(推荐甜玉米或糯玉米)
- 生姜
- 小葱
- 料酒
- 食盐
- 砂锅或深汤锅
## 计算
每次制作前需要确定计划做几份。一份正好够 2 人喝。
每份:
- 排骨 500g
- 山药 1 根(大约 300g
- 胡萝卜 1 根(大约 150g
- 玉米 1 根(大约 250g
- 生姜(大约 20g切片备用
- 小葱(大约 15g打结或切末备用
- 料酒 15ml
- 食用油 10ml
- 饮用水 1500ml - 2000ml
- 食盐 6g - 8g
## 操作
- **食材预处理**
- 将胡萝卜洗净去皮,切成大约 3cm 的滚刀块。
- 玉米洗净,剁成大约 4cm 的圆柱状小块。
- 山药去皮(建议佩戴手套,防止粘液导致皮肤过敏),切成大约 4cm 的长段,备用。
- **排骨焯水**
- 锅中加入足量冷水,放入洗净的排骨。
- 加入大约 10g 姜片、葱结和 15ml 料酒。
- 大火煮沸,沸腾后**等待 3 分钟**,期间用勺子撇去表面浮沫。
- 捞出排骨,用大约 40℃ 的温水洗净杂质,沥干备用。
- **翻炒排骨**
- 热锅,倒入 10ml 食用油,等待 10 秒让油温升高。
- 放入剩余大约 10g 姜片爆香。
- 放入全部准备好的排骨,保持中火翻炒大约 1 分钟,至排骨表面微焦。
- **炖煮过程**
- 在锅中一次性加入 1500ml - 2000ml 饮用水。
- 放入全部准备好的胡萝卜、玉米和山药。
- 大火烧开后转小火,盖上锅盖,**慢炖 40 分钟**。
- **调味与出锅**
- 加入 6g - 8g 食盐,用勺子搅拌均匀。
- 保持小火继续**炖煮 2 分钟**使盐分入味。
- 关火,根据个人喜好撒入小葱末,盛盘。
## 附加内容
- **防氧化技巧**:山药去皮后若不立即下锅,应浸泡在清水中,防止接触空气氧化变黑。
- **口感控制**:若喜欢山药极度软糯,可与排骨同时下锅;若喜欢山药成块不散,可在排骨炖煮 20 分钟后再放入山药。
- **补水须知**:炖煮过程中如发现水位低于食材,务必添加热水,避免加入冷水导致肉质纤维瞬间收缩变柴。
如果您遵循本指南的制作流程而发现有问题或可以改进的流程,请提出 Issue 或 Pull request 。

View File

@@ -1,5 +0,0 @@
mkdocs-material
mkdocs-same-dir
mkdocs-minify-plugin
mkdocs-with-pdf
weasyprint

View File

@@ -1,3 +0,0 @@
# 0 星难度菜品
* [煎烤羊排](./../dishes/meat_dish/煎烤羊排/煎烤羊排.md)

View File

@@ -1,35 +0,0 @@
# 1 星难度菜品
* [吐司果酱](./../dishes/breakfast/吐司果酱.md)
* [微波炉荷包蛋](./../dishes/breakfast/微波炉荷包蛋.md)
* [微波炉蒸蛋](./../dishes/breakfast/微波炉蒸蛋.md)
* [微波炉蛋糕](./../dishes/breakfast/微波炉蛋糕.md)
* [牛奶燕麦](./../dishes/breakfast/牛奶燕麦.md)
* [空气炸锅面包片](./../dishes/breakfast/空气炸锅面包片.md)
* [金枪鱼酱三明治](./../dishes/breakfast/金枪鱼酱三明治.md)
* [韩国麻药鸡蛋](./../dishes/breakfast/韩国麻药鸡蛋.md)
* [蔗糖糖浆](./../dishes/condiment/蔗糖糖浆/蔗糖糖浆.md)
* [奇异果菠菜特调](./../dishes/drink/奇异果菠菜特调/奇异果菠菜特调.md)
* [柠檬水](./../dishes/drink/柠檬水/柠檬水.md)
* [牛油果拉西](./../dishes/drink/牛油果拉西.md)
* [砂糖椰子冰沙](./../dishes/drink/砂糖椰子冰沙/砂糖椰子冰沙.md)
* [酸梅汤(半成品加工)](./../dishes/drink/酸梅汤(半成品加工).md)
* [黔式腊肠娃娃菜](./../dishes/meat_dish/黔式腊肠娃娃菜/黔式腊肠娃娃菜.md)
* [半成品意面](./../dishes/semi-finished/半成品意面.md)
* [速冻水饺](./../dishes/semi-finished/速冻水饺.md)
* [速冻汤圆](./../dishes/semi-finished/速冻汤圆/速冻汤圆.md)
* [奶油蘑菇汤](./../dishes/soup/奶油蘑菇汤.md)
* [朱雀汤](./../dishes/soup/朱雀汤/朱雀汤.md)
* [意式肉酱面](./../dishes/staple/意式肉酱面/意式肉酱面.md)
* [煮泡面加蛋](./../dishes/staple/煮泡面加蛋.md)
* [猪油拌饭](./../dishes/staple/猪油拌饭.md)
* [电饭煲蒸米饭](./../dishes/staple/米饭/电饭煲蒸米饭.md)
* [老干妈拌面](./../dishes/staple/老干妈拌面.md)
* [螺蛳粉](./../dishes/staple/螺蛳粉.md)
* [麻油拌面](./../dishes/staple/麻油拌面.md)
* [凉拌油麦菜](./../dishes/vegetable_dish/凉拌油麦菜.md)
* [凉拌黄瓜](./../dishes/vegetable_dish/凉拌黄瓜.md)
* [清蒸南瓜](./../dishes/vegetable_dish/清蒸南瓜.md)
* [炒滑蛋](./../dishes/vegetable_dish/炒滑蛋/炒滑蛋.md)
* [皮蛋豆腐](./../dishes/vegetable_dish/皮蛋豆腐.md)
* [鸡蛋花](./../dishes/vegetable_dish/鸡蛋花/鸡蛋花.md)

View File

@@ -1,90 +0,0 @@
# 2 星难度菜品
* [白灼虾](./../dishes/aquatic/白灼虾/白灼虾.md)
* [蒜蓉虾](./../dishes/aquatic/蒜蓉虾/蒜蓉虾.md)
* [蒜香黄油虾](./../dishes/aquatic/蒜香黄油虾/蒜香黄油虾.md)
* [太阳蛋](./../dishes/breakfast/太阳蛋.md)
* [手抓饼](./../dishes/breakfast/手抓饼.md)
* [桂圆红枣粥](./../dishes/breakfast/桂圆红枣粥.md)
* [水煮玉米](./../dishes/breakfast/水煮玉米.md)
* [煎饺](./../dishes/breakfast/煎饺.md)
* [燕麦鸡蛋饼](./../dishes/breakfast/燕麦鸡蛋饼.md)
* [美式炒蛋](./../dishes/breakfast/美式炒蛋.md)
* [蒸水蛋](./../dishes/breakfast/蒸水蛋.md)
* [蒸花卷](./../dishes/breakfast/蒸花卷.md)
* [蛋煎糍粑](./../dishes/breakfast/蛋煎糍粑.md)
* [鸡蛋三明治](./../dishes/breakfast/鸡蛋三明治.md)
* [油酥](./../dishes/condiment/油酥.md)
* [炸串酱料](./../dishes/condiment/炸串酱料.md)
* [糖醋汁](./../dishes/condiment/糖醋汁.md)
* [草莓酱](./../dishes/condiment/草莓酱/草莓酱.md)
* [蒜香酱油](./../dishes/condiment/蒜香酱油.md)
* [烤箱版巴斯克芝士蛋糕](./../dishes/dessert/烤箱版巴斯克芝士蛋糕/烤箱版巴斯克芝士蛋糕.md)
* [草莓冰淇淋](./../dishes/dessert/草莓冰淇淋/草莓冰淇淋.md)
* [龟苓膏](./../dishes/dessert/龟苓膏/龟苓膏.md)
* [冬瓜茶](./../dishes/drink/冬瓜茶.md)
* [冰粉](./../dishes/drink/冰粉/冰粉.md)
* [印度奶茶](./../dishes/drink/印度奶茶.md)
* [可乐桶](./../dishes/drink/可乐桶.md)
* [奶茶](./../dishes/drink/奶茶.md)
* [杨枝甘露](./../dishes/drink/杨枝甘露.md)
* [耙耙柑茶](./../dishes/drink/耙耙柑茶/耙耙柑茶.md)
* [金汤力](./../dishes/drink/金汤力/金汤力.md)
* [金菲士](./../dishes/drink/金菲士/金菲士.md)
* [长岛冰茶](./../dishes/drink/长岛冰茶.md)
* [澳门湿版免治牛肉饭](./../dishes/meat_dish/澳门湿版免治牛肉饭.md)
* [荷兰豆炒腊肠](./../dishes/meat_dish/荷兰豆炒腊肠/荷兰豆炒腊肠.md)
* [蒜苔炒肉末](./../dishes/meat_dish/蒜苔炒肉末.md)
* [豆豉鲮鱼油麦菜](./../dishes/meat_dish/豆豉鲮鱼油麦菜/豆豉鲮鱼油麦菜.md)
* [炸薯条](./../dishes/semi-finished/炸薯条/炸薯条.md)
* [空气炸锅鸡翅中](./../dishes/semi-finished/空气炸锅鸡翅中/空气炸锅鸡翅中.md)
* [速冻馄饨](./../dishes/semi-finished/速冻馄饨.md)
* [小米粥](./../dishes/soup/小米粥.md)
* [米粥](./../dishes/soup/米粥.md)
* [紫菜蛋花汤](./../dishes/soup/紫菜蛋花汤.md)
* [西红柿鸡蛋汤](./../dishes/soup/西红柿鸡蛋汤.md)
* [金针菇汤](./../dishes/soup/金针菇汤.md)
* [黄瓜皮蛋汤](./../dishes/soup/黄瓜皮蛋汤.md)
* [微波炉腊肠煲仔饭](./../dishes/staple/微波炉腊肠煲仔饭/微波炉腊肠煲仔饭.md)
* [汤面](./../dishes/staple/汤面.md)
* [炒方便面](./../dishes/staple/炒方便面.md)
* [电饭煲三文鱼炊饭](./../dishes/staple/电饭煲三文鱼炊饭/电饭煲三文鱼炊饭.md)
* [煮锅蒸米饭](./../dishes/staple/米饭/煮锅蒸米饭.md)
* [葱油拌面](./../dishes/staple/葱油拌面.md)
* [西红柿鸡蛋挂面](./../dishes/staple/西红柿鸡蛋挂面/西红柿鸡蛋挂面.md)
* [酱拌荞麦面](./../dishes/staple/酱拌荞麦面/酱拌荞麦面.md)
* [酸辣蕨根粉](./../dishes/staple/酸辣蕨根粉.md)
* [醪糟小汤圆](./../dishes/staple/醪糟小汤圆.md)
* [陕西油泼面](./../dishes/staple/陕西油泼面/陕西油泼面.md)
* [鲣鱼海苔玉米饭](./../dishes/staple/鲣鱼海苔玉米饭/鲣鱼海苔玉米饭.md)
* [麻辣减脂荞麦面](./../dishes/staple/麻辣减脂荞麦面.md)
* [凉拌木耳](./../dishes/vegetable_dish/凉拌木耳/凉拌木耳.md)
* [凉拌莴笋](./../dishes/vegetable_dish/凉拌莴笋/凉拌莴笋.md)
* [凉拌豆腐](./../dishes/vegetable_dish/凉拌豆腐.md)
* [凉拌金针菇](./../dishes/vegetable_dish/凉拌金针菇.md)
* [松仁玉米](./../dishes/vegetable_dish/松仁玉米.md)
* [水油焖蔬菜](./../dishes/vegetable_dish/水油焖蔬菜.md)
* [油醋爆蛋](./../dishes/vegetable_dish/油醋爆蛋.md)
* [洋葱炒鸡蛋](./../dishes/vegetable_dish/洋葱炒鸡蛋/洋葱炒鸡蛋.md)
* [清炒花菜](./../dishes/vegetable_dish/清炒花菜.md)
* [炒青菜](./../dishes/vegetable_dish/炒青菜.md)
* [白灼菜心](./../dishes/vegetable_dish/白灼菜心/白灼菜心.md)
* [糖拌西红柿](./../dishes/vegetable_dish/糖拌西红柿/糖拌西红柿.md)
* [素炒豆角](./../dishes/vegetable_dish/素炒豆角.md)
* [芹菜拌茶树菇](./../dishes/vegetable_dish/芹菜拌茶树菇/芹菜拌茶树菇.md)
* [莴笋叶煎饼](./../dishes/vegetable_dish/莴笋叶煎饼/莴笋叶煎饼.md)
* [菠菜炒鸡蛋](./../dishes/vegetable_dish/菠菜炒鸡蛋/菠菜炒鸡蛋.md)
* [蒜蓉空心菜](./../dishes/vegetable_dish/蒜蓉空心菜/蒜蓉空心菜.md)
* [蒜蓉西兰花](./../dishes/vegetable_dish/蒜蓉西兰花.md)
* [蚝油生菜](./../dishes/vegetable_dish/蚝油生菜.md)
* [西红柿炒鸡蛋](./../dishes/vegetable_dish/西红柿炒鸡蛋.md)
* [西红柿豆腐汤羹](./../dishes/vegetable_dish/西红柿豆腐汤羹/西红柿豆腐汤羹.md)
* [西葫芦炒鸡蛋](./../dishes/vegetable_dish/西葫芦炒鸡蛋/西葫芦炒鸡蛋.md)
* [话梅煮毛豆](./../dishes/vegetable_dish/话梅煮毛豆/话梅煮毛豆.md)
* [酸辣土豆丝](./../dishes/vegetable_dish/酸辣土豆丝.md)
* [金针菇日本豆腐煲](./../dishes/vegetable_dish/金针菇日本豆腐煲.md)
* [陕北熬豆角](./../dishes/vegetable_dish/陕北熬豆角.md)
* [雷椒皮蛋](./../dishes/vegetable_dish/雷椒皮蛋.md)
* [鸡蛋火腿炒黄瓜](./../dishes/vegetable_dish/鸡蛋火腿炒黄瓜.md)
* [微波炉鸡蛋羹](./../dishes/vegetable_dish/鸡蛋羹/微波炉鸡蛋羹.md)
* [鸡蛋羹](./../dishes/vegetable_dish/鸡蛋羹/鸡蛋羹.md)

View File

@@ -1,128 +0,0 @@
# 3 星难度菜品
* [响油鳝丝](./../dishes/aquatic/响油鳝丝.md)
* [干煎阿根廷红虾](./../dishes/aquatic/干煎阿根廷红虾/干煎阿根廷红虾.md)
* [微波葱姜黑鳕鱼](./../dishes/aquatic/微波葱姜黑鳕鱼.md)
* [清蒸生蚝](./../dishes/aquatic/清蒸生蚝.md)
* [清蒸鲈鱼](./../dishes/aquatic/清蒸鲈鱼/清蒸鲈鱼.md)
* [芥末黄油罗氏虾](./../dishes/aquatic/芥末黄油罗氏虾/芥末黄油罗氏虾.md)
* [葱烧海参](./../dishes/aquatic/葱烧海参/葱烧海参.md)
* [蛏抱蛋](./../dishes/aquatic/蛏抱蛋/蛏抱蛋.md)
* [酱炖蟹](./../dishes/aquatic/酱炖蟹.md)
* [鲤鱼炖白菜](./../dishes/aquatic/鲤鱼炖白菜/鲤鱼炖白菜.md)
* [鳊鱼炖豆腐](./../dishes/aquatic/鳊鱼炖豆腐/鳊鱼炖豆腐.md)
* [黄油煎虾](./../dishes/aquatic/黄油煎虾/黄油煎虾.md)
* [意式香肠北非蛋](./../dishes/breakfast/意式香肠北非蛋.md)
* [温泉蛋](./../dishes/breakfast/温泉蛋/温泉蛋.md)
* [溏心蛋](./../dishes/breakfast/溏心蛋.md)
* [苏格兰蛋](./../dishes/breakfast/苏格兰蛋/苏格兰蛋.md)
* [茶叶蛋](./../dishes/breakfast/茶叶蛋.md)
* [油泼辣子](./../dishes/condiment/油泼辣子/油泼辣子.md)
* [葱油](./../dishes/condiment/葱油.md)
* [反沙芋头](./../dishes/dessert/反沙芋头/反沙芋头.md)
* [奥利奥冰淇淋](./../dishes/dessert/奥利奥冰淇淋/奥利奥冰淇淋.md)
* [炸鲜奶](./../dishes/dessert/炸鲜奶/炸鲜奶.md)
* [玛格丽特饼干](./../dishes/dessert/玛格丽特饼干/玛格丽特饼干.md)
* [红柚蛋糕](./../dishes/dessert/红柚蛋糕/红柚蛋糕.md)
* [胡萝卜甜糕](./../dishes/dessert/胡萝卜甜糕.md)
* [英式司康](./../dishes/dessert/英式司康/英式司康.md)
* [雪花酥](./../dishes/dessert/雪花酥/雪花酥.md)
* [B52轰炸机](./../dishes/drink/B52轰炸机.md)
* [Mojito莫吉托](./../dishes/drink/Mojito莫吉托.md)
* [泰国手标红茶](./../dishes/drink/泰国手标红茶/泰国手标红茶.md)
* [海边落日](./../dishes/drink/海边落日/海边落日.md)
* [百香果橙子特调](./../dishes/drink/百香果橙子特调/百香果橙子特调.md)
* [菠萝咖啡特调](./../dishes/drink/菠萝咖啡特调/菠萝咖啡特调.md)
* [农家一碗香](./../dishes/meat_dish/农家一碗香/农家一碗香.md)
* [凉拌鸡丝](./../dishes/meat_dish/凉拌鸡丝/凉拌鸡丝.md)
* [卤菜](./../dishes/meat_dish/卤菜/卤菜.md)
* [口水鸡](./../dishes/meat_dish/口水鸡/口水鸡.md)
* [可乐鸡翅](./../dishes/meat_dish/可乐鸡翅.md)
* [土豆炖排骨](./../dishes/meat_dish/土豆炖排骨/土豆炖排骨.md)
* [奶酪培根通心粉](./../dishes/meat_dish/奶酪培根通心粉/奶酪培根通心粉.md)
* [姜炒鸡](./../dishes/meat_dish/姜炒鸡/姜炒鸡.md)
* [姜葱捞鸡](./../dishes/meat_dish/姜葱捞鸡/姜葱捞鸡.md)
* [孜然牛肉](./../dishes/meat_dish/孜然牛肉.md)
* [小炒肉](./../dishes/meat_dish/小炒肉.md)
* [小炒鸡肝](./../dishes/meat_dish/小炒鸡肝/小炒鸡肝.md)
* [小米辣炒肉](./../dishes/meat_dish/小米辣炒肉.md)
* [小酥肉](./../dishes/meat_dish/小酥肉.md)
* [尖椒炒牛肉](./../dishes/meat_dish/尖椒炒牛肉.md)
* [意式烤鸡](./../dishes/meat_dish/意式烤鸡.md)
* [水煮牛肉](./../dishes/meat_dish/水煮牛肉/水煮牛肉.md)
* [洋葱炒猪肉](./../dishes/meat_dish/洋葱炒猪肉.md)
* [清蒸鳜鱼](./../dishes/meat_dish/清蒸鳜鱼/清蒸鳜鱼.md)
* [湖南家常红烧肉](./../dishes/meat_dish/湖南家常红烧肉/湖南家常红烧肉.md)
* [烤鸡翅](./../dishes/meat_dish/烤鸡翅.md)
* [甜辣烤全翅](./../dishes/meat_dish/甜辣烤全翅.md)
* [瘦肉土豆片](./../dishes/meat_dish/瘦肉土豆片/瘦肉土豆片.md)
* [白菜猪肉炖粉条](./../dishes/meat_dish/白菜猪肉炖粉条.md)
* [简易红烧肉](./../dishes/meat_dish/红烧肉/简易红烧肉.md)
* [红烧鸡翅](./../dishes/meat_dish/红烧鸡翅.md)
* [肉饼炖蛋](./../dishes/meat_dish/肉饼炖蛋.md)
* [芥末罗氏虾](./../dishes/meat_dish/芥末罗氏虾/芥末罗氏虾.md)
* [茭白炒肉](./../dishes/meat_dish/茭白炒肉/茭白炒肉.md)
* [蚂蚁上树](./../dishes/meat_dish/蚂蚁上树.md)
* [豉汁蒸白鱔](./../dishes/meat_dish/豉汁蒸白鱔/豉汁蒸白鱔.md)
* [辣椒炒肉](./../dishes/meat_dish/辣椒炒肉.md)
* [青椒土豆炒肉](./../dishes/meat_dish/青椒土豆炒肉/青椒土豆炒肉.md)
* [香干肉丝](./../dishes/meat_dish/香干肉丝.md)
* [香干芹菜炒肉](./../dishes/meat_dish/香干芹菜炒肉/香干芹菜炒肉.md)
* [香煎五花肉](./../dishes/meat_dish/香煎五花肉/香煎五花肉.md)
* [香菇滑鸡](./../dishes/meat_dish/香菇滑鸡/香菇滑鸡.md)
* [鱼香茄子](./../dishes/meat_dish/鱼香茄子/鱼香茄子.md)
* [麻婆豆腐](./../dishes/meat_dish/麻婆豆腐/麻婆豆腐.md)
* [麻辣香锅](./../dishes/meat_dish/麻辣香锅.md)
* [黄焖鸡](./../dishes/meat_dish/黄焖鸡.md)
* [黄瓜炒肉](./../dishes/meat_dish/黄瓜炒肉.md)
* [凉皮](./../dishes/semi-finished/凉皮.md)
* [懒人蛋挞](./../dishes/semi-finished/懒人蛋挞/懒人蛋挞.md)
* [空气炸锅羊排](./../dishes/semi-finished/空气炸锅羊排/空气炸锅羊排.md)
* [勾芡香菇汤](./../dishes/soup/勾芡香菇汤/勾芡香菇汤.md)
* [昂刺鱼豆腐汤](./../dishes/soup/昂刺鱼豆腐汤/昂刺鱼豆腐汤.md)
* [玉米排骨汤](./../dishes/soup/玉米排骨汤/玉米排骨汤.md)
* [番茄牛肉蛋花汤](./../dishes/soup/番茄牛肉蛋花汤.md)
* [皮蛋瘦肉粥](./../dishes/soup/皮蛋瘦肉粥.md)
* [羊肉汤](./../dishes/soup/羊肉汤/羊肉汤.md)
* [陈皮排骨汤](./../dishes/soup/陈皮排骨汤/陈皮排骨汤.md)
* [凉粉](./../dishes/staple/凉粉/凉粉.md)
* [印度烤饼](./../dishes/staple/印度烤饼.md)
* [可乐炒饭](./../dishes/staple/可乐炒饭.md)
* [炒凉粉](./../dishes/staple/炒凉粉/炒凉粉.md)
* [炒年糕](./../dishes/staple/炒年糕.md)
* [炒意大利面](./../dishes/staple/炒意大利面/炒意大利面.md)
* [炒馍](./../dishes/staple/炒馍.md)
* [炸酱面](./../dishes/staple/炸酱面.md)
* [芝麻烧饼](./../dishes/staple/烧饼/芝麻烧饼.md)
* [热干面](./../dishes/staple/热干面.md)
* [红芸豆拌饭](./../dishes/staple/红芸豆拌饭.md)
* [老友猪肉粉](./../dishes/staple/老友猪肉粉/老友猪肉粉.md)
* [肉蛋盖饭](./../dishes/staple/肉蛋盖饭.md)
* [茄子肉煎饼](./../dishes/staple/茄子肉煎饼/茄子肉煎饼.md)
* [蛋包饭](./../dishes/staple/蛋包饭.md)
* [蛋炒饭](./../dishes/staple/蛋炒饭.md)
* [豆角焖面](./../dishes/staple/豆角焖面/豆角焖面.md)
* [韩式拌饭](./../dishes/staple/韩式拌饭/韩式拌饭.md)
* [韭菜盒子](./../dishes/staple/韭菜盒子.md)
* [上汤娃娃菜](./../dishes/vegetable_dish/上汤娃娃菜/上汤娃娃菜.md)
* [包菜炒鸡蛋粉丝](./../dishes/vegetable_dish/包菜炒鸡蛋粉丝/包菜炒鸡蛋粉丝.md)
* [印度土豆花菜](./../dishes/vegetable_dish/印度土豆花菜.md)
* [地三鲜](./../dishes/vegetable_dish/地三鲜.md)
* [家常日本豆腐](./../dishes/vegetable_dish/家常日本豆腐.md)
* [小炒藕丁](./../dishes/vegetable_dish/小炒藕丁/小炒藕丁.md)
* [干锅花菜](./../dishes/vegetable_dish/干锅花菜/干锅花菜.md)
* [手撕包菜](./../dishes/vegetable_dish/手撕包菜/手撕包菜.md)
* [拔丝土豆](./../dishes/vegetable_dish/拔丝土豆/拔丝土豆.md)
* [椒盐玉米](./../dishes/vegetable_dish/椒盐玉米/椒盐玉米.md)
* [榄菜肉末四季豆](./../dishes/vegetable_dish/榄菜肉末四季豆/榄菜肉末四季豆.md)
* [炒茄子](./../dishes/vegetable_dish/炒茄子.md)
* [烤茄子](./../dishes/vegetable_dish/烤茄子/烤茄子.md)
* [红烧冬瓜](./../dishes/vegetable_dish/红烧冬瓜/红烧冬瓜.md)
* [脆皮豆腐](./../dishes/vegetable_dish/脆皮豆腐.md)
* [茄子炖土豆](./../dishes/vegetable_dish/茄子炖土豆.md)
* [葱煎豆腐](./../dishes/vegetable_dish/葱煎豆腐.md)
* [蒲烧茄子](./../dishes/vegetable_dish/蒲烧茄子.md)
* [虎皮青椒](./../dishes/vegetable_dish/虎皮青椒/虎皮青椒.md)
* [蚝油三鲜菇](./../dishes/vegetable_dish/蚝油三鲜菇/蚝油三鲜菇.md)
* [金钱蛋](./../dishes/vegetable_dish/金钱蛋.md)
* [蒸箱鸡蛋羹](./../dishes/vegetable_dish/鸡蛋羹/蒸箱鸡蛋羹.md)

View File

@@ -1,89 +0,0 @@
# 4 星难度菜品
* [咖喱炒蟹](./../dishes/aquatic/咖喱炒蟹.md)
* [小龙虾](./../dishes/aquatic/小龙虾/小龙虾.md)
* [水煮鱼](./../dishes/aquatic/水煮鱼.md)
* [油焖大虾](./../dishes/aquatic/油焖大虾/油焖大虾.md)
* [烤鱼](./../dishes/aquatic/混合烤鱼/烤鱼.md)
* [糖醋鲤鱼](./../dishes/aquatic/糖醋鲤鱼/糖醋鲤鱼.md)
* [红烧鱼](./../dishes/aquatic/红烧鱼.md)
* [红烧鱼头](./../dishes/aquatic/红烧鱼头.md)
* [红烧鲤鱼](./../dishes/aquatic/红烧鲤鱼.md)
* [肉蟹煲](./../dishes/aquatic/肉蟹煲.md)
* [葱油桂鱼](./../dishes/aquatic/葱油桂鱼/葱油桂鱼.md)
* [香煎翘嘴鱼](./../dishes/aquatic/香煎翘嘴鱼/香煎翘嘴鱼.md)
* [简易版炒糖色](./../dishes/condiment/简易版炒糖色.md)
* [咖啡椰奶冻](./../dishes/dessert/咖啡椰奶冻/咖啡椰奶冻.md)
* [提拉米苏](./../dishes/dessert/提拉米苏/提拉米苏.md)
* [烤蛋挞](./../dishes/dessert/烤蛋挞/烤蛋挞.md)
* [酸奶意式奶冻](./../dishes/dessert/酸奶意式奶冻/酸奶意式奶冻.md)
* [魔芋蛋糕](./../dishes/dessert/魔芋蛋糕/魔芋蛋糕.md)
* [酒酿醪糟](./../dishes/drink/酒酿醪糟/酒酿醪糟.md)
* [酸梅汤](./../dishes/drink/酸梅汤/酸梅汤.md)
* [乡村啤酒鸭](./../dishes/meat_dish/乡村啤酒鸭.md)
* [冬瓜酿肉](./../dishes/meat_dish/冬瓜酿肉/冬瓜酿肉.md)
* [冷吃兔](./../dishes/meat_dish/冷吃兔.md)
* [咕噜肉](./../dishes/meat_dish/咕噜肉.md)
* [咖喱肥牛](./../dishes/meat_dish/咖喱肥牛/咖喱肥牛.md)
* [啤酒鸭](./../dishes/meat_dish/啤酒鸭/啤酒鸭.md)
* [回锅肉](./../dishes/meat_dish/回锅肉/回锅肉.md)
* [宫保鸡丁](./../dishes/meat_dish/宫保鸡丁/宫保鸡丁.md)
* [小炒黄牛肉](./../dishes/meat_dish/小炒黄牛肉/小炒黄牛肉.md)
* [尖叫牛蛙](./../dishes/meat_dish/尖叫牛蛙/尖叫牛蛙.md)
* [山西过油肉](./../dishes/meat_dish/山西过油肉.md)
* [干煸仔鸡](./../dishes/meat_dish/干煸仔鸡/干煸仔鸡.md)
* [广式萝卜牛腩](./../dishes/meat_dish/广式萝卜牛腩/广式萝卜牛腩.md)
* [徽派红烧肉](./../dishes/meat_dish/徽派红烧肉/徽派红烧肉.md)
* [新疆大盘鸡](./../dishes/meat_dish/新疆大盘鸡/新疆大盘鸡.md)
* [杀猪菜](./../dishes/meat_dish/杀猪菜.md)
* [柱候牛腩](./../dishes/meat_dish/柱候牛腩/柱候牛腩.md)
* [梅菜扣肉](./../dishes/meat_dish/梅菜扣肉/梅菜扣肉.md)
* [椒盐排条](./../dishes/meat_dish/椒盐排条.md)
* [湘祁米夫鸭](./../dishes/meat_dish/湘祁米夫鸭/湘祁米夫鸭.md)
* [煎烤羊排](./../dishes/meat_dish/煎烤羊排/煎烤羊排.md)
* [牛排](./../dishes/meat_dish/牛排/牛排.md)
* [番茄红酱](./../dishes/meat_dish/番茄红酱.md)
* [粉蒸肉](./../dishes/meat_dish/粉蒸肉.md)
* [糖醋排骨](./../dishes/meat_dish/糖醋排骨/糖醋排骨.md)
* [糖醋里脊](./../dishes/meat_dish/糖醋里脊.md)
* [红烧猪蹄](./../dishes/meat_dish/红烧猪蹄/红烧猪蹄.md)
* [南派红烧肉](./../dishes/meat_dish/红烧肉/南派红烧肉.md)
* [羊排焖面](./../dishes/meat_dish/羊排焖面/羊排焖面.md)
* [老妈蹄花](./../dishes/meat_dish/老妈蹄花/老妈蹄花.md)
* [老式锅包肉](./../dishes/meat_dish/老式锅包肉/老式锅包肉.md)
* [荔枝肉](./../dishes/meat_dish/荔枝肉/荔枝肉.md)
* [萝卜炖羊排](./../dishes/meat_dish/萝卜炖羊排.md)
* [西红柿土豆炖牛肉](./../dishes/meat_dish/西红柿土豆炖牛肉/西红柿土豆炖牛肉.md)
* [豉汁排骨](./../dishes/meat_dish/豉汁排骨.md)
* [贵州辣子鸡](./../dishes/meat_dish/贵州辣子鸡/贵州辣子鸡.md)
* [酱排骨](./../dishes/meat_dish/酱排骨/酱排骨.md)
* [醉排骨](./../dishes/meat_dish/醉排骨/醉排骨.md)
* [香辣鸡爪煲](./../dishes/meat_dish/香辣鸡爪煲/香辣鸡爪煲.md)
* [鱼香肉丝](./../dishes/meat_dish/鱼香肉丝.md)
* [黄油鸡](./../dishes/meat_dish/黄油鸡.md)
* [黑椒牛柳](./../dishes/meat_dish/黑椒牛柳/黑椒牛柳.md)
* [排骨苦瓜汤](./../dishes/soup/排骨苦瓜汤/排骨苦瓜汤.md)
* [生汆丸子汤](./../dishes/soup/生汆丸子汤.md)
* [罗宋汤](./../dishes/soup/罗宋汤.md)
* [腊八粥](./../dishes/soup/腊八粥.md)
* [菌菇炖乳鸽](./../dishes/soup/菌菇炖乳鸽/菌菇炖乳鸽.md)
* [银耳莲子粥](./../dishes/soup/银耳莲子粥/银耳莲子粥.md)
* [陈皮排骨汤](./../dishes/soup/陈皮排骨汤.md)
* [中式馅饼](./../dishes/staple/中式馅饼/中式馅饼.md)
* [咸肉菜饭](./../dishes/staple/咸肉菜饭.md)
* [扬州炒饭](./../dishes/staple/扬州炒饭/扬州炒饭.md)
* [披萨饼皮](./../dishes/staple/披萨饼皮/披萨饼皮.md)
* [日式咖喱饭](./../dishes/staple/日式咖喱饭/日式咖喱饭.md)
* [日式肥牛丼饭](./../dishes/staple/日式肥牛丼饭/日式肥牛丼饭.md)
* [河南蒸面条](./../dishes/staple/河南蒸面条/河南蒸面条.md)
* [火腿饭团](./../dishes/staple/火腿饭团/火腿饭团.md)
* [炒河粉](./../dishes/staple/炒河粉.md)
* [烙饼](./../dishes/staple/烙饼/烙饼.md)
* [照烧鸡腿饭](./../dishes/staple/照烧鸡腿饭.md)
* [空气炸锅照烧鸡饭](./../dishes/staple/空气炸锅照烧鸡饭/空气炸锅照烧鸡饭.md)
* [蒸卤面](./../dishes/staple/蒸卤面.md)
* [鲜肉烧卖](./../dishes/staple/鲜肉烧卖.md)
* [鹰嘴豆炸饼](./../dishes/staple/鹰嘴豆炸饼.md)
* [示例菜](./../dishes/template/示例菜/示例菜.md)
* [印度葫芦丸子](./../dishes/vegetable_dish/印度葫芦丸子.md)
* [红烧茄子](./../dishes/vegetable_dish/红烧茄子.md)

View File

@@ -1,25 +0,0 @@
# 5 星难度菜品
* [完美水煮蛋](./../dishes/breakfast/完美水煮蛋.md)
* [戚风蛋糕](./../dishes/dessert/戚风蛋糕/戚风蛋糕.md)
* [无厨师机蜂蜜面包](./../dishes/dessert/无厨师机蜂蜜面包/无厨师机蜂蜜面包.md)
* [芋泥雪媚娘](./../dishes/dessert/芋泥雪媚娘/芋泥雪媚娘.md)
* [台式卤肉饭](./../dishes/meat_dish/台式卤肉饭/台式卤肉饭.md)
* [商芝肉](./../dishes/meat_dish/商芝肉.md)
* [巴基斯坦牛肉咖喱](./../dishes/meat_dish/巴基斯坦牛肉咖喱/巴基斯坦牛肉咖喱.md)
* [带把肘子](./../dishes/meat_dish/带把肘子.md)
* [无骨鸡爪](./../dishes/meat_dish/无骨鸡爪/无骨鸡爪.md)
* [枝竹羊腩煲](./../dishes/meat_dish/枝竹羊腩煲/枝竹羊腩煲.md)
* [水煮肉片](./../dishes/meat_dish/水煮肉片.md)
* [猪皮冻](./../dishes/meat_dish/猪皮冻/猪皮冻.md)
* [猪肉烩酸菜](./../dishes/meat_dish/猪肉烩酸菜.md)
* [腐乳肉](./../dishes/meat_dish/腐乳肉.md)
* [虎皮肘子](./../dishes/meat_dish/虎皮肘子.md)
* [血浆鸭](./../dishes/meat_dish/血浆鸭/血浆鸭.md)
* [西红柿牛腩](./../dishes/meat_dish/西红柿牛腩/西红柿牛腩.md)
* [酱牛肉](./../dishes/meat_dish/酱牛肉/酱牛肉.md)
* [牛油火锅底料](./../dishes/semi-finished/牛油火锅底料.md)
* [利提巧卡](./../dishes/staple/利提巧卡.md)
* [印度焖饭](./../dishes/staple/印度焖饭.md)
* [基础牛奶面包](./../dishes/staple/基础牛奶面包/基础牛奶面包.md)
* [手工水饺](./../dishes/staple/手工水饺.md)

View File

@@ -1,3 +0,0 @@
# 7 星难度菜品
* [无厨师机蜂蜜面包](./../dishes/dessert/无厨师机蜂蜜面包/无厨师机蜂蜜面包.md)

View File

@@ -1,3 +0,0 @@
# 8 星难度菜品
* [照烧鸡腿饭](./../dishes/staple/照烧鸡腿饭.md)

View File

@@ -99,44 +99,47 @@ GB 28050-2011 规定,食品配料含有或生产过程中使用了氢化和(
| 椰子油 | 91% | 0% | 2% | 7% | | 椰子油 | 91% | 0% | 2% | 7% |
* `花生油`富含`单不饱和脂肪`。但只建议选择高品质的。加工时也要注意不要加热过久以免产生`反式脂肪酸` * `花生油`富含`单不饱和脂肪`。但只建议选择高品质的。加工时也要注意不要加热过久以免产生`反式脂肪酸`
* `橄榄油`富含`单不饱和脂肪`,其只有一个不饱和键。橄榄油`饱和脂肪酸`含量少。但只建议选择高品质的。加工时也要注意不要加热过久以免产生反式脂肪酸。 * `橄榄油`富含`单不饱和脂肪`,其只有一个不饱和键。橄榄油`饱和脂肪酸`含量少。
* `大豆油`不含`饱和脂肪酸`,且含有亚油酸、维生素。但大豆油不稳定,容易在加工时产生`反式脂肪酸`,因此不建议长期食用,可以用于凉拌 * **凉拌/低温烹饪:** 建议选择**特级初榨橄榄油(Extra Virgin)**,保留了更多的多酚等抗氧化物质,但其烟点较低(约 160-190℃不适合高温爆炒
* `菜籽油`热稳定性好,富含`多不饱和脂肪酸`,但可能含有芥酸,可能会引起脂肪沉积和心脏损伤。菜籽油缺少亚油酸,营养价值较低,容易腐败 * **中高温炒菜:** 建议选择**精炼橄榄油**(标有 Pure 或 Refined烟点更高230℃ 以上),更适合中式烹饪
* `椰子油``饱和脂肪酸`非常高,热稳定性好,但注意有些食品会使用氢化椰子油。适合在厨房用于煎炸,经常食用会增加肥胖风险 * `大豆油`含有约 15% `饱和脂肪酸`,且含有亚油酸、维生素。但大豆油多不饱和脂肪酸含量高,性质不稳定,容易在加工时产生`反式脂肪酸`,因此不建议长期用于高温爆炒,可以用于凉拌或普通炖煮
* `棕榈油``饱和脂肪酸`非常高,热稳定性好,经常食用会增加高胆固醇风险 * `菜籽油`热稳定性较好
* `猪油``牛油`等动物油脂,富含`饱和脂肪酸`,经常食用会增加高胆固醇风险。不推荐长期食用 * **传统菜籽油:** 可能含有较高的芥酸,长期大量食用可能对心血管不利
* **双低菜籽油(即芥花油 Canola Oil** 经过改良,芥酸含量极低(<2%),脂肪酸比例非常优秀(单不饱和脂肪酸高,且含 Omega-3是目前营养学界非常推荐的日常炒菜用油。
* `椰子油``饱和脂肪酸`非常高,热稳定性极好,但注意有些食品会使用氢化椰子油。适合在厨房用于煎炸。
* `棕榈油``饱和脂肪酸`非常高,热稳定性好,常用于商业煎炸,经常食用会增加高胆固醇风险。
* `猪油``牛油`等动物油脂,富含`饱和脂肪酸`,热稳定性极佳。虽然不容易在高温下产生有害物质,但因其对心血管健康的潜在负面影响,建议控制摄入量,不推荐作为单一长期食用油。
因此,根据上述表格,我们可以得出一些结论: 因此,根据上述表格,我们可以得出一些结论:
* 没有任何一种油品是完美的,每种油品都有其优缺点。因此,我们应该根据不同的烹饪场景选择不同的油品。 * 没有任何一种油品是完美的,每种油品都有其优缺点。我们应该根据不同的烹饪场景(冷、热、炸)选择不同的油品。
* 不应该始终使用同一类油品,应该根据不同的烹饪场景选择不同的油品,以确保营养均衡 * **避免单一用油:** 现代人 Omega-6 摄入往往超标,而 Omega-3 严重不足。建议家中常备 2-3 种不同类型的油替换使用
* 为了不摄入太多 `反式脂肪酸`。在加热时,不要选择热不稳定的油品,不要加热过久。 * 为了不摄入太多 `反式脂肪酸`。在加热时,不要选择热不稳定的油品(如大豆油、玉米油爆炒),不要加热过久。
* 不要大量食用煎炸食品。热稳定性好的油往往又含有大量的`饱和脂肪酸`,不适合长期食用 * 不要大量食用煎炸食品。虽然饱和脂肪热稳定性好,但过量摄入饱和脂肪本身也是健康的负担
* 不要重复使用油品。油品在加热过程中会产生大量的`反式脂肪酸` * 不要重复使用油品。油品在重复加热过程中会产生大量的`反式脂肪酸`和氧化产物
* 不要长时间食用外卖食品,因为很难确定他们使用了什么油品。 * 不要长时间食用外卖食品,因为很难确定他们使用了什么油品(通常是廉价且不稳定的油脂)
#### 炒菜油 #### 炒菜油(中温)
* 花生油 (选择高油品质 * 芥花油(双低菜籽油
* 橄榄油 (选择高油品质) * 花生油
* 菜籽油 (选择低芥酸) * 精炼橄榄油
花生油、橄榄油、菜籽油含有较多不饱和脂肪酸,含有较少的饱和脂肪酸。但是其热稳定性较差,容易在加热过程中产生反式脂肪酸。因此,要注意控制加热时间,不要加热过久 这些油含有较多不饱和脂肪酸,烟点适中或较高,能够胜任大多数中式炒菜需求
#### 煎炸油 #### 煎炸油(高温)
* 椰子油 * 椰子油
* 棕榈油 * 棕榈油
* 牛油 * 猪油/牛油
* 猪油
爆炒、油炸时需要使用热稳定性更好的油,如:椰子油、棕榈油、牛油。它们产生的反式脂肪酸会更少。但是,它们的饱和脂肪酸含量较高,不适合长期食用 爆炒、油炸时需要使用热稳定性更好的饱和脂肪,它们产生的有害氧化产物更少。但从心血管健康考虑,**最根本的策略是减少煎炸的频率**
#### 凉拌、炖煮油 #### 凉拌、低温、炖煮油
* 亚麻籽油 * 亚麻籽油
* 芝麻油
* 核桃油
* 紫苏油 * 紫苏油
* 特级初榨橄榄油
* 芝麻油/核桃油
这类场景不需要加热,因此不会产生反式脂肪酸。不要选择有太多饱和脂肪酸的油品 亚麻籽油和紫苏油富含极其珍贵的 **Omega-3**,但它们极度怕热,稍微加热就会氧化变质并产生异味。将它们作为凉拌油是补充 Omega-3 的“满分策略”