mirror of
https://github.com/Anduin2017/HowToCook.git
synced 2026-01-08 16:27:22 +08:00
Compare commits
35 Commits
a1a4bd8696
...
1.5.0
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2780b6d188 | ||
|
|
816546cc11 | ||
|
|
dcc6f784a9 | ||
|
|
a737675a0f | ||
|
|
7329b150cd | ||
|
|
73f4eaf025 | ||
|
|
7977224616 | ||
|
|
4f1d430923 | ||
|
|
50e6e3b1a0 | ||
|
|
038278f207 | ||
|
|
bfd705d18e | ||
|
|
1cb2fd4360 | ||
|
|
e2e8cd10db | ||
|
|
ea963d131e | ||
|
|
01299778d7 | ||
|
|
cf70399e54 | ||
|
|
7bd91953f9 | ||
|
|
3b22478b1d | ||
|
|
379325b333 | ||
|
|
dd185b8313 | ||
|
|
906c1c16e5 | ||
|
|
61696d7a83 | ||
|
|
8355aeb755 | ||
|
|
f82d21b893 | ||
|
|
1d7eee9cdc | ||
|
|
ef73a66674 | ||
|
|
d3f21a15fb | ||
|
|
f680ffaddb | ||
|
|
98e00a9ae5 | ||
|
|
186ebeff22 | ||
|
|
5104a26537 | ||
|
|
36b9b82791 | ||
|
|
60daf6e906 | ||
|
|
a8b8571663 | ||
|
|
1b87305ccb |
320
.github/manual_lint.js
vendored
320
.github/manual_lint.js
vendored
@@ -4,158 +4,196 @@ const fs = require("fs").promises;
|
||||
const path = require('path');
|
||||
|
||||
const MAX_FILE_SIZE = 1024 * 1024; // 1MB
|
||||
// glob 模式,定位菜谱 Markdown 文件和所有文件
|
||||
const DISHES_GLOB = path.resolve(__dirname, '../../dishes/**/*.md');
|
||||
const ALL_FILES_GLOB = path.resolve(__dirname, '../../dishes/**/*');
|
||||
|
||||
async function checkFileSize(filePath) {
|
||||
try {
|
||||
const stats = await fs.stat(filePath);
|
||||
return stats.size;
|
||||
} catch (error) {
|
||||
console.error(`Error checking file size for ${filePath}: ${error.message}`);
|
||||
return 0;
|
||||
}
|
||||
// 工具函数:获取文件状态,包括大小
|
||||
async function getFileStats(filePath) {
|
||||
try {
|
||||
const stats = await fs.stat(filePath);
|
||||
return stats;
|
||||
} catch (err) {
|
||||
console.error(`检查文件状态时出错: ${filePath} -> ${err.message}`);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
// 工具函数:读取文件内容并按行返回
|
||||
async function readLines(filePath) {
|
||||
const content = await fs.readFile(filePath, 'utf8');
|
||||
return content.split('\n').map(line => line.trim());
|
||||
}
|
||||
|
||||
// 校验函数集合
|
||||
const validators = [
|
||||
async (filePath, lines, errors) => {
|
||||
const filenameWithoutExt = path.parse(filePath).name; // .name 是不带扩展名的文件名
|
||||
if (filenameWithoutExt.includes(' ')) {
|
||||
errors.push(`文件 ${filePath} 不符合仓库的规范!文件名不能包含空格! (当前文件名: ${filenameWithoutExt})`);
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
async (filePath, lines, errors) => {
|
||||
const filenameWithoutExt = path.parse(filePath).name;
|
||||
const expectedMainTitle = `# ${filenameWithoutExt}的做法`;
|
||||
const titles = lines.filter(l => l.startsWith('#'));
|
||||
|
||||
if (!titles.length || titles[0] !== expectedMainTitle) {
|
||||
errors.push(`文件 ${filePath} 不符合仓库的规范!它的大标题应该是: "${expectedMainTitle}"! 而它现在是 "${titles[0] || '未找到主标题'}"!`);
|
||||
return;
|
||||
}
|
||||
|
||||
const sections = lines.filter(l => l.startsWith('## '));
|
||||
const requiredSections = ['## 必备原料和工具', '## 计算', '## 操作', '## 附加内容'];
|
||||
|
||||
|
||||
if (sections.length !== requiredSections.length) {
|
||||
errors.push(`文件 ${filePath} 不符合仓库的规范!它并不是四个二级标题的格式 (应为 ${requiredSections.length} 个,实际 ${sections.length} 个)。请从示例菜模板中创建菜谱!请不要破坏模板的格式!`);
|
||||
return;
|
||||
}
|
||||
|
||||
requiredSections.forEach((sec, idx) => {
|
||||
if (sections[idx] !== sec) {
|
||||
let titleName = "";
|
||||
if (idx === 0) titleName = "第一个";
|
||||
else if (idx === 1) titleName = "第二个";
|
||||
else if (idx === 2) titleName = "第三个";
|
||||
else if (idx === 3) titleName = "第四个";
|
||||
|
||||
errors.push(`文件 ${filePath} 不符合仓库的规范!${titleName}标题不是 ${sec}! (当前为: "${sections[idx] || '未找到'}")`);
|
||||
}
|
||||
});
|
||||
|
||||
// 检查烹饪难度
|
||||
const mainTitleIndex = titles.length > 0 ? lines.indexOf(titles[0]) : -1;
|
||||
const firstSecondTitleIndex = sections.length > 0 ? lines.indexOf(sections[0]) : -1;
|
||||
|
||||
if (mainTitleIndex >= 0 && firstSecondTitleIndex >= 0 && mainTitleIndex < firstSecondTitleIndex) {
|
||||
const contentBetweenTitles = lines.slice(mainTitleIndex + 1, firstSecondTitleIndex);
|
||||
let hasDifficultyLine = false;
|
||||
const difficultyPatternGeneral = /^预估烹饪难度:(★*)$/;
|
||||
const difficultyPatternStrict = /^预估烹饪难度:★{1,5}$/;
|
||||
|
||||
for (const line of contentBetweenTitles) {
|
||||
if (difficultyPatternGeneral.test(line)) {
|
||||
hasDifficultyLine = true;
|
||||
if (!difficultyPatternStrict.test(line)) {
|
||||
const starMatch = line.match(/★/g);
|
||||
const starCount = starMatch ? starMatch.length : 0;
|
||||
errors.push(`文件 ${filePath} 不符合仓库的规范!烹饪难度的星星数量必须在1-5颗之间!(当前为 ${starCount} 颗)`);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!hasDifficultyLine) {
|
||||
errors.push(`文件 ${filePath} 不符合仓库的规范!在大标题和第一个二级标题之间必须包含"预估烹饪难度:★★"格式的难度评级,星星数量必须在1-5颗之间!`);
|
||||
}
|
||||
} else if (mainTitleIndex === -1 || firstSecondTitleIndex === -1) {
|
||||
errors.push(`文件 ${filePath} 结构错误,无法定位烹饪难度区域。`);
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
async (filePath, lines, errors) => {
|
||||
const count = keyword => lines.filter(l => l.includes(keyword)).length;
|
||||
|
||||
if (count('勺') > count('勺子') + count('炒勺') + count('漏勺') + count('吧勺')) {
|
||||
errors.push(`文件 ${filePath} 不符合仓库的规范!勺 不是一个精准的单位!`);
|
||||
}
|
||||
if (count(' 杯') > count('杯子')) {
|
||||
errors.push(`文件 ${filePath} 不符合仓库的规范!杯 不是一个精准的单位!`);
|
||||
}
|
||||
['适量', '少许'].forEach(w => {
|
||||
if (count(w) > 0) {
|
||||
errors.push(`文件 ${filePath} 不符合仓库的规范!${w} 不是一个精准的描述!请给出克 g 或毫升 ml。`);
|
||||
}
|
||||
});
|
||||
if (count('min') > 0) {
|
||||
errors.push(`文件 ${filePath} 不符合仓库的规范!min 这个词汇有多重含义。建议改成中文"分钟"。`);
|
||||
}
|
||||
if (count('左右') > 0) {
|
||||
errors.push(`文件 ${filePath} 不符合仓库的规范!左右 不是一个能够明确定量的标准! 如果是在描述一个模糊物体的特征,请使用 '大约'。例如:鸡(大约1kg)`);
|
||||
}
|
||||
['你', '我'].forEach(pronoun => {
|
||||
if (count(pronoun) > 0) {
|
||||
errors.push(`文件 ${filePath} 不符合仓库的规范!请不要出现人称代词。`);
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
|
||||
async (filePath, lines, errors) => {
|
||||
const hasPortion = lines.some(l => l.includes('份数'));
|
||||
const hasTotal = lines.some(l => l.includes('总量'));
|
||||
const hasTemplateLine = lines.some(l => l.includes('每次制作前需要确定计划做几份。一份正好够'));
|
||||
|
||||
if (hasPortion && (!hasTotal || !hasTemplateLine)) {
|
||||
errors.push(`文件 ${filePath} 不符合仓库的规范!它使用份数作为基础,这种情况下一般是一次制作,制作多份的情况。请标明:总量 并写明 '每次制作前需要确定计划做几份。一份正好够 几 个人食用。'。`);
|
||||
}
|
||||
if (lines.some(l => l.includes('每人') || l.includes('人数'))) {
|
||||
errors.push(`文件 ${filePath} 不符合仓库的规范!请基于每道菜\\每份为基准。不要基于人数。人数是一个可能会导致在应用中发生问题的单位。如果需要面向大量的人食用,请标明一个人需要几份。`);
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
async (filePath, lines, errors) => {
|
||||
const footer = '如果您遵循本指南的制作流程而发现有问题或可以改进的流程,请提出 Issue 或 Pull request 。';
|
||||
if (!lines.includes(footer)) {
|
||||
errors.push(`文件 ${filePath} 不符合仓库的规范! 它没有包含必需的附加内容!,需要在最后一行添加模板中的【${footer}】`);
|
||||
}
|
||||
}
|
||||
];
|
||||
|
||||
|
||||
async function main() {
|
||||
var errors = [];
|
||||
var directories = await glob(__dirname + '../../dishes/**/*.md');
|
||||
const errors = [];
|
||||
// 获取所有文件和 Markdown 文件路径
|
||||
const allPaths = await glob(ALL_FILES_GLOB);
|
||||
const mdPaths = await glob(DISHES_GLOB);
|
||||
|
||||
// Check all files in dishes directory for size
|
||||
var allFiles = await glob(__dirname + '../../dishes/**/*');
|
||||
|
||||
// Check each file size
|
||||
for (var filePath of allFiles) {
|
||||
const fileSize = await checkFileSize(filePath);
|
||||
if (fileSize > MAX_FILE_SIZE) {
|
||||
errors.push(`文件 ${filePath} 超过了1MB大小限制 (${(fileSize/1048576).toFixed(2)}MB)! 请压缩图片或分割文件。`);
|
||||
}
|
||||
// 检查文件大小和扩展名
|
||||
for (const p of allPaths) {
|
||||
const stats = await getFileStats(p);
|
||||
if (!stats) { // 如果获取状态失败,跳过后续检查
|
||||
errors.push(`无法获取文件状态: ${p},跳过此文件的检查。`);
|
||||
continue;
|
||||
}
|
||||
|
||||
// Check for files without extensions
|
||||
for (var filePath of allFiles) {
|
||||
const stats = await fs.stat(filePath);
|
||||
// Only check files (not directories)
|
||||
if (stats.isFile()) {
|
||||
const extension = path.extname(filePath);
|
||||
if (extension === '') {
|
||||
errors.push(`文件 ${filePath} 不符合仓库的规范!文件必须有扩展名!`);
|
||||
}
|
||||
}
|
||||
if (stats.size > MAX_FILE_SIZE) {
|
||||
errors.push(`文件 ${p} 超过了1MB大小限制 (${(stats.size/1048576).toFixed(2)}MB)! 请压缩图片或分割文件。`);
|
||||
}
|
||||
|
||||
for (var filePath of directories) {
|
||||
var data = await fs.readFile(filePath, 'utf8');
|
||||
var filename = path.parse(filePath).base.replace(".md","");
|
||||
|
||||
if (filename.includes(' ')) {
|
||||
errors.push(`文件 ${filePath} 不符合仓库的规范!文件名不能包含空格!`);
|
||||
}
|
||||
|
||||
dataLines = data.split('\n').map(t => t.trim());
|
||||
titles = dataLines.filter(t => t.startsWith('#'));
|
||||
secondTitles = titles.filter(t => t.startsWith('## '));
|
||||
|
||||
if (dataLines.filter(line => line.includes('勺')).length >
|
||||
dataLines.filter(line => line.includes('勺子')).length +
|
||||
dataLines.filter(line => line.includes('炒勺')).length +
|
||||
dataLines.filter(line => line.includes('漏勺')).length +
|
||||
dataLines.filter(line => line.includes('吧勺')).length) {
|
||||
errors.push(`文件 ${filePath} 不符合仓库的规范!勺 不是一个精准的单位!`);
|
||||
}
|
||||
if (dataLines.filter(line => line.includes(' 杯')).length >
|
||||
dataLines.filter(line => line.includes('杯子')).length) {
|
||||
errors.push(`文件 ${filePath} 不符合仓库的规范!杯 不是一个精准的单位!`);
|
||||
}
|
||||
if (dataLines.filter(line => line.includes('适量')).length > 0) {
|
||||
errors.push(`文件 ${filePath} 不符合仓库的规范!适量 不是一个精准的描述!请给出克 g 或毫升 ml。`);
|
||||
}
|
||||
if (dataLines.filter(line => line.includes('每人')).length + dataLines.filter(line => line.includes('人数')).length > 0) {
|
||||
errors.push(`文件 ${filePath} 不符合仓库的规范!请基于每道菜\\每份为基准。不要基于人数。人数是一个可能会导致在应用中发生问题的单位。如果需要面向大量的人食用,请标明一个人需要几份。`);
|
||||
}
|
||||
if (
|
||||
dataLines.filter(line => line.includes('份数')).length > 0 &&
|
||||
(
|
||||
dataLines.filter(line => line.includes('总量')).length == 0 ||
|
||||
dataLines.filter(line => line.includes('每次制作前需要确定计划做几份。一份正好够')).length == 0
|
||||
)
|
||||
) {
|
||||
errors.push(`文件 ${filePath} 不符合仓库的规范!它使用份数作为基础,这种情况下一般是一次制作,制作多份的情况。请标明:总量 并写明 '每次制作前需要确定计划做几份。一份正好够 几 个人食用。'。`);
|
||||
}
|
||||
if (dataLines.filter(line => line.includes('min')).length > 0) {
|
||||
errors.push(`文件 ${filePath} 不符合仓库的规范!min 这个词汇有多重含义。建议改成中文"分钟"。`);
|
||||
}
|
||||
if (dataLines.filter(line => line.includes('左右')).length > 0) {
|
||||
errors.push(`文件 ${filePath} 不符合仓库的规范!左右 不是一个能够明确定量的标准! 如果是在描述一个模糊物体的特征,请使用 '大约'。例如:鸡(大约1kg)`);
|
||||
}
|
||||
if (dataLines.filter(line => line.includes('少许')).length > 0) {
|
||||
errors.push(`文件 ${filePath} 不符合仓库的规范!少许 不是一个精准的描述!请给出克 g 或毫升 ml。`);
|
||||
}
|
||||
if (dataLines.filter(line => line.includes('你')).length + dataLines.filter(line => line.includes('我')).length > 0) {
|
||||
errors.push(`文件 ${filePath} 不符合仓库的规范!请不要出现人称代词。`);
|
||||
}
|
||||
if (titles[0].trim() != "# " + filename + "的做法") {
|
||||
errors.push(`文件 ${filePath} 不符合仓库的规范!它的大标题应该是: ${"# " + filename + "的做法"}! 而它现在是 ${titles[0].trim()}!`);
|
||||
continue;
|
||||
}
|
||||
|
||||
// 检查烹饪难度
|
||||
const mainTitleIndex = dataLines.indexOf(titles[0].trim());
|
||||
const firstSecondTitleIndex = dataLines.indexOf(secondTitles[0].trim());
|
||||
|
||||
if (mainTitleIndex >= 0 && firstSecondTitleIndex >= 0) {
|
||||
// 检查大标题和第一个二级标题之间是否有预估烹饪难度
|
||||
let hasDifficulty = false;
|
||||
const difficultyPattern = /^预估烹饪难度:★{1,5}$/;
|
||||
|
||||
for (let i = mainTitleIndex + 1; i < firstSecondTitleIndex; i++) {
|
||||
if (difficultyPattern.test(dataLines[i])) {
|
||||
hasDifficulty = true;
|
||||
// 检查星星数量是否在1-5之间
|
||||
const starCount = (dataLines[i].match(/★/g) || []).length;
|
||||
if (starCount < 1 || starCount > 5) {
|
||||
errors.push(`文件 ${filePath} 不符合仓库的规范!烹饪难度的星星数量必须在1-5颗之间!`);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!hasDifficulty) {
|
||||
errors.push(`文件 ${filePath} 不符合仓库的规范!在大标题和第一个二级标题之间必须包含"预估烹饪难度:★★"格式的难度评级,星星数量必须在1-5颗之间!`);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (secondTitles.length != 4) {
|
||||
errors.push(`文件 ${filePath} 不符合仓库的规范!它并不是四个标题的格式。请从示例菜模板中创建菜谱!请不要破坏模板的格式!`);
|
||||
continue;
|
||||
}
|
||||
if (secondTitles[0].trim() != "## 必备原料和工具") {
|
||||
errors.push(`文件 ${filePath} 不符合仓库的规范!第一个标题不是 必备原料和工具!`);
|
||||
}
|
||||
if (secondTitles[1].trim() != "## 计算") {
|
||||
errors.push(`文件 ${filePath} 不符合仓库的规范!第二个标题不是 计算!`);
|
||||
}
|
||||
if (secondTitles[2].trim() != "## 操作") {
|
||||
errors.push(`文件 ${filePath} 不符合仓库的规范!第三个标题不是 操作`);
|
||||
}
|
||||
if (secondTitles[3].trim() != "## 附加内容") {
|
||||
errors.push(`文件 ${filePath} 不符合仓库的规范!第四个标题不是 附加内容`);
|
||||
}
|
||||
|
||||
var mustHave = '如果您遵循本指南的制作流程而发现有问题或可以改进的流程,请提出 Issue 或 Pull request 。';
|
||||
var mustHaveIndex = dataLines.indexOf(mustHave);
|
||||
if (mustHaveIndex < 0) {
|
||||
errors.push(`文件 ${filePath} 不符合仓库的规范! 它没有包含必需的附加内容!,需要在最后一行添加模板中的【如果您遵循本指南的制作流程而发现有……】`);
|
||||
}
|
||||
// 检查扩展名
|
||||
if (stats.isFile()) {
|
||||
const ext = path.extname(p);
|
||||
if (!ext) {
|
||||
errors.push(`文件 ${p} 不符合仓库的规范!文件必须有扩展名!`);
|
||||
}
|
||||
}
|
||||
|
||||
if (errors.length > 0) {
|
||||
for (var error of errors) {
|
||||
console.error(error + "\n");
|
||||
}
|
||||
}
|
||||
|
||||
var message = `Found ${errors.length} errors! Please fix!`;
|
||||
throw new Error(message);
|
||||
// 对 Markdown 文件逐项校验内容
|
||||
for (const p of mdPaths) {
|
||||
const lines = await readLines(p);
|
||||
for (const validate of validators) {
|
||||
await validate(p, lines, errors);
|
||||
}
|
||||
}
|
||||
|
||||
// 输出错误并退出
|
||||
if (errors.length) {
|
||||
errors.forEach(e => console.error(e + "\n"));
|
||||
const message = `Found ${errors.length} errors! Please fix!`;
|
||||
throw new Error(message);
|
||||
} else {
|
||||
console.log("所有检查已通过!没有发现错误。");
|
||||
}
|
||||
}
|
||||
|
||||
main();
|
||||
|
||||
main().catch(err => {
|
||||
console.error("\n" + err.message);
|
||||
process.exit(1);
|
||||
});
|
||||
|
||||
3
.github/templates/readme_template.md
vendored
3
.github/templates/readme_template.md
vendored
@@ -6,6 +6,7 @@
|
||||
[](https://www.npmjs.com/package/how-to-cook)
|
||||

|
||||
[](https://github.com/Anduin2017/HowToCook/pkgs/container/how-to-cook)
|
||||
[](https://rvlt.gg/ndApqZEs)
|
||||
|
||||
最近宅在家做饭,作为程序员,我偶尔在网上找找菜谱和做法。但是这些菜谱往往写法千奇百怪,经常中间莫名出来一些材料。对于习惯了形式语言的程序员来说极其不友好。
|
||||
|
||||
@@ -19,7 +20,7 @@
|
||||
|
||||
```bash
|
||||
docker pull ghcr.io/anduin2017/how-to-cook:latest
|
||||
docker run -d -p 5000:5000 ghcr.io/anduin2017/how-to-cook:latest
|
||||
docker run -d -p 5000:80 ghcr.io/anduin2017/how-to-cook:latest
|
||||
```
|
||||
|
||||
如需下载 PDF 版本,可以在浏览器中访问 [/document.pdf](https://cook.aiursoft.cn/document.pdf)
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# ============================
|
||||
# Prepare lint Environment
|
||||
FROM node:22-alpine as lint-env
|
||||
FROM node:22-alpine AS lint-env
|
||||
WORKDIR /app
|
||||
COPY . .
|
||||
RUN npm install --loglevel verbose
|
||||
@@ -9,7 +9,7 @@ RUN npm run lint
|
||||
|
||||
# ============================
|
||||
# Prepare Build Environment
|
||||
FROM python:3.11 as python-env
|
||||
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
|
||||
@@ -18,7 +18,7 @@ RUN mkdocs build
|
||||
|
||||
# ============================
|
||||
# Prepare Runtime Environment
|
||||
FROM aiursoft/static
|
||||
COPY --from=python-env /app/site /data
|
||||
FROM nginx:1-alpine
|
||||
COPY --from=python-env /app/site /usr/share/nginx/html
|
||||
|
||||
LABEL org.opencontainers.image.source="https://github.com/Anduin2017/HowToCook"
|
||||
|
||||
17
README.md
17
README.md
@@ -6,6 +6,7 @@
|
||||
[](https://www.npmjs.com/package/how-to-cook)
|
||||

|
||||
[](https://github.com/Anduin2017/HowToCook/pkgs/container/how-to-cook)
|
||||
[](https://rvlt.gg/ndApqZEs)
|
||||
|
||||
最近宅在家做饭,作为程序员,我偶尔在网上找找菜谱和做法。但是这些菜谱往往写法千奇百怪,经常中间莫名出来一些材料。对于习惯了形式语言的程序员来说极其不友好。
|
||||
|
||||
@@ -19,7 +20,7 @@
|
||||
|
||||
```bash
|
||||
docker pull ghcr.io/anduin2017/how-to-cook:latest
|
||||
docker run -d -p 5000:5000 ghcr.io/anduin2017/how-to-cook:latest
|
||||
docker run -d -p 5000:80 ghcr.io/anduin2017/how-to-cook:latest
|
||||
```
|
||||
|
||||
如需下载 PDF 版本,可以在浏览器中访问 [/document.pdf](https://cook.aiursoft.cn/document.pdf)
|
||||
@@ -86,12 +87,16 @@ docker run -d -p 5000:5000 ghcr.io/anduin2017/how-to-cook:latest
|
||||
- [烤茄子](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)
|
||||
@@ -99,6 +104,8 @@ docker run -d -p 5000:5000 ghcr.io/anduin2017/how-to-cook:latest
|
||||
- [松仁玉米](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)
|
||||
@@ -111,6 +118,7 @@ docker run -d -p 5000:5000 ghcr.io/anduin2017/how-to-cook:latest
|
||||
|
||||
- [巴基斯坦牛肉咖喱](dishes/meat_dish/巴基斯坦牛肉咖喱/巴基斯坦牛肉咖喱.md)
|
||||
- [白菜猪肉炖粉条](dishes/meat_dish/白菜猪肉炖粉条.md)
|
||||
- [豉汁蒸白鱔食谱](dishes/meat_dish/豉汁蒸白鱔/豉汁蒸白鱔食谱.md)
|
||||
- [带把肘子](dishes/meat_dish/带把肘子.md)
|
||||
- [冬瓜酿肉](dishes/meat_dish/冬瓜酿肉/冬瓜酿肉.md)
|
||||
- [豆豉鲮鱼油麦菜](dishes/meat_dish/豆豉鲮鱼油麦菜/豆豉鲮鱼油麦菜.md)
|
||||
@@ -127,6 +135,7 @@ docker run -d -p 5000:5000 ghcr.io/anduin2017/how-to-cook:latest
|
||||
- [南派红烧肉](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)
|
||||
@@ -264,8 +273,10 @@ docker run -d -p 5000:5000 ghcr.io/anduin2017/how-to-cook:latest
|
||||
- [炒馍](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)
|
||||
@@ -298,6 +309,7 @@ docker run -d -p 5000:5000 ghcr.io/anduin2017/how-to-cook:latest
|
||||
- [微波炉腊肠煲仔饭](dishes/staple/微波炉腊肠煲仔饭/微波炉腊肠煲仔饭.md)
|
||||
- [西红柿鸡蛋挂面](dishes/staple/西红柿鸡蛋挂面/西红柿鸡蛋挂面.md)
|
||||
- [扬州炒饭](dishes/staple/扬州炒饭/扬州炒饭.md)
|
||||
- [意式肉酱面](dishes/staple/意式肉酱面/意式肉酱面.md)
|
||||
- [炸酱面](dishes/staple/炸酱面.md)
|
||||
- [蒸卤面](dishes/staple/蒸卤面.md)
|
||||
- [中式馅饼](dishes/staple/中式馅饼/中式馅饼.md)
|
||||
@@ -367,9 +379,9 @@ docker run -d -p 5000:5000 ghcr.io/anduin2017/how-to-cook:latest
|
||||
|
||||
- [草莓酱](dishes/condiment/草莓酱/草莓酱.md)
|
||||
- [葱油](dishes/condiment/葱油.md)
|
||||
- [简易版炒糖色](dishes/condiment/简易版炒糖色.md)
|
||||
- [蒜香酱油](dishes/condiment/蒜香酱油.md)
|
||||
- [糖醋汁](dishes/condiment/糖醋汁.md)
|
||||
- [糖色](dishes/condiment/糖色.md)
|
||||
- [油泼辣子](dishes/condiment/油泼辣子/油泼辣子.md)
|
||||
- [油酥](dishes/condiment/油酥.md)
|
||||
- [炸串酱料](dishes/condiment/炸串酱料.md)
|
||||
@@ -400,6 +412,7 @@ docker run -d -p 5000:5000 ghcr.io/anduin2017/how-to-cook:latest
|
||||
|
||||
- [辅料技巧](tips/advanced/辅料技巧.md)
|
||||
- [高级专业术语](tips/advanced/高级专业术语.md)
|
||||
- [糖色的炒制](tips/advanced/糖色的炒制.md)
|
||||
- [油温判断技巧](tips/advanced/油温判断技巧.md)
|
||||
|
||||
## 衍生作品推荐
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
# 糖色的做法
|
||||
# 简易版炒糖色的做法
|
||||
|
||||
这是简易的糖色的做法。对于更为进阶的技巧和糖色更为进阶的用法,请学习[糖色的炒制](../../tips/advanced/糖色的炒制.md)。
|
||||
|
||||
预估烹饪难度:★★★★
|
||||
|
||||
@@ -75,7 +75,7 @@
|
||||
|
||||
### 初炸定形状
|
||||
|
||||
- 锅中倒入植物油,根据锅大小控制油量,油面高度 3 厘米以上°
|
||||
- 锅中倒入植物油,根据锅大小控制油量,油面高度 3 厘米以上。
|
||||
- 大火将温加热至 150° 后,转小火保持温度。
|
||||
- 将裹好粉的肉条用筷子夹入油锅中,捋成自己喜欢的形状,炸 3~5 分钟定型。目测颜色微黄,用锅铲翻动感受倒略微有些硬了就可以。具体时间受肉块大小、油温、裹粉程度影响。
|
||||
- 捞出沥油。
|
||||
@@ -88,7 +88,7 @@ tips: 如果对时间没把握可以稍微多炸一下,否则肉会带一点
|
||||
|
||||
## 附加内容
|
||||
|
||||
- 裹粉一定要吧红薯粉揉散,不要有干的颗粒裹在里面,否则会炸!!!
|
||||
- 裹粉一定要把红薯粉揉散,不要有干的颗粒裹在里面,否则会炸!!!
|
||||
- 如果肉太多吃不完,可以只炸一遍然后放冰箱。后面再吃的时候拿出来复炸,口感基本没影响。
|
||||
|
||||
如果您遵循本指南的制作流程而发现有问题或可以改进的流程,请提出 Issue 或 Pull request 。
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
|
||||
## 操作
|
||||
|
||||
建议在此之前查看炒[糖色](./../../condiment/糖色.md)教程
|
||||
建议在此之前查看炒[糖色](./../../condiment/简易版炒糖色.md)教程
|
||||
|
||||
- `猪五花肉`切大块(约 4.5cm )
|
||||
- `生姜`切片(每片厚度约 3mm )
|
||||
@@ -41,7 +41,7 @@
|
||||
- `蒜`中间切开,不要拍扁,否则难以捞出以至最后`收汁`时影响味道
|
||||
- 建议先拿出来一半葱姜,再将剩下的`生姜、葱白、蒜、花椒、八角、香叶`提前放入一个碗中备用
|
||||
- 凉水锅中放入切好的五花肉,加入料酒与 2/5 葱姜,煮 15 分钟去掉血腥,捞出来后洗干净;
|
||||
- 炒[糖色](./../../condiment/糖色.md),注意采用其中提到的操作 2 来制作糖色。
|
||||
- 炒[糖色](./../../condiment/简易版炒糖色.md),注意采用其中提到的操作 2 来制作糖色。
|
||||
- 将准备好的`生姜、葱白、蒜、花椒、八角、香叶`还有`五花肉`倒入锅中`大火`翻炒,期间加入至闻到香味,倒入开水至没过全部肉炖煮 50 分钟-60 分钟
|
||||
- 高压锅的话 40 分钟;
|
||||
- 加入 10ml 料酒;
|
||||
|
||||
109
dishes/meat_dish/虎皮肘子.md
Normal file
109
dishes/meat_dish/虎皮肘子.md
Normal file
@@ -0,0 +1,109 @@
|
||||
# 虎皮肘子的做法
|
||||
|
||||
虎皮肘子是一道传统名菜,以猪肘为主料,通过先烧再炸后炖三个步骤使肘子皮呈现出虎皮状。肘子皮软烂入味,肥而不腻,瘦肉松软可口。这道菜是逢年过节让老辈子闭嘴猛炫的不二之选,可谓是救命法宝。
|
||||
|
||||
预估烹饪难度:★★★★★
|
||||
|
||||
## 必备原料和工具
|
||||
|
||||
- 猪前肘
|
||||
- 食用植物油
|
||||
- 冰糖
|
||||
- 盐
|
||||
- 老抽
|
||||
- 生抽
|
||||
- 白醋
|
||||
- 香叶
|
||||
- 肉桂皮
|
||||
- 豆蔻
|
||||
- 花椒
|
||||
- 大料
|
||||
- 淀粉
|
||||
- 葱
|
||||
- 姜
|
||||
- 蒜
|
||||
- 水
|
||||
- 料酒
|
||||
|
||||
## 计算
|
||||
|
||||
- 1 汤匙 = 15ml
|
||||
- 1 茶匙 = 5ml
|
||||
|
||||
|原料|数量|单位|
|
||||
|:---:|:---:|:---:|
|
||||
|猪前肘|1|个|
|
||||
|食用植物油|1|桶|
|
||||
|冰糖|5|桶|
|
||||
|盐|1-2|茶匙|
|
||||
|老抽|1|茶匙|
|
||||
|生抽|1|汤匙|
|
||||
|白醋|1|汤匙|
|
||||
|香叶|3|片|
|
||||
|肉桂皮|2-3|克|
|
||||
|豆蔻|3|个|
|
||||
|花椒|8-12|个|
|
||||
|大料|2-4|个|
|
||||
|淀粉|1|汤匙|
|
||||
|葱|2|棵|
|
||||
|姜|6|克|
|
||||
|蒜|6|粒|
|
||||
|料酒|2|汤匙|
|
||||
|
||||
## 操作
|
||||
|
||||
### 预处理
|
||||
|
||||
- 猪肘解冻后水泡 1 小时去除血水。
|
||||
- 如有火焰喷枪,则使用火焰喷枪灼烧**猪肘皮**表面至**棕黑色**以去除猪毛,破坏汗腺。注意不要长时间炙烤同一个位置以避免烧焦,当猪肘皮几乎完全呈现棕黑色时则停止灼烧。
|
||||
- 如无火焰喷枪,将铁锅烧至 200 以上,将猪肘直接放入锅内,用锅铲或筷子使猪肘皮充分接触铁锅表面,当猪肘皮与铁锅接触位置呈现出棕色时,更换位置继续烫猪肘皮,直到整个猪肘被充分烫过。注意再次过程中注意铁锅温度,不要使铁锅红热。
|
||||
- 使用清洁球在水中刷洗猪肘,将其表面烧焦的部分去除。刷洗结束后,猪肘再次呈现出未被灼烧前的状态。
|
||||
- 将猪肘置于铁锅中,加尽量多的冷水,具体视铁锅深度与猪肘大小而定,在保证可以拿得动铁锅及其内容物的情况下,能浸没猪肘 3/4 以上为最佳。
|
||||
|
||||
### 去腥
|
||||
|
||||
- 取 1 棵葱的葱白,分成 3 段,放入锅中。
|
||||
- 取 3 粒蒜,分别用刀身拍扁,放入锅中。
|
||||
- 取 3 克姜,放入锅中。
|
||||
- 将 2 汤匙料酒加入锅中。
|
||||
- 锅中水烧开后,等待五分钟,随后将猪肘取出,捡出锅中所有配料,更换容器保留所有肉汤备用。
|
||||
|
||||
### 油炸
|
||||
|
||||
- 向锅中加入冷油,以之前水量为参考,能浸没猪肘 3/5 以上为佳,开中火加热。
|
||||
- 当[油温](tips/advanced/油温判断技巧.md)达到五成时,转为小火,放入猪肘油炸。
|
||||
- 在油炸过程中烹饪者应注意人身安全。
|
||||
- 在油炸过程中,使用锅铲或其他耐高温厨具将锅中的油均匀淋到猪肘未被浸没的部分,如果条件允许应以 3 分钟的间隔翻转猪肘,使其油炸均匀。
|
||||
- 油炸过程持续大约 20 分钟,当观察到猪肘皮已经全部呈现出浅棕色,而瘦肉部分已经微焦,则可捞出备用。
|
||||
- 炸制完后的油可用于制作其他油炸类食物,但注意不要使用太多次。
|
||||
|
||||
### 炒糖色
|
||||
|
||||
- [炒糖色](../../tips/advanced/糖色的炒制.md)200ml 备用。
|
||||
|
||||
### 炖煮
|
||||
|
||||
- 将猪肘加入高压锅内,加入所有肉汤、糖色、香叶、肉桂皮、豆蔻、花椒、大料、老抽、生抽、白醋。如果喜欢甜口,可以再额外加入 2-3 克冰糖。
|
||||
- 取 1 棵葱的葱白,分成 3 段,放入锅中。
|
||||
- 取 3 粒蒜,分别用刀身拍扁,放入锅中。
|
||||
- 取 3 克姜,放入锅中。
|
||||
- 盖上锅盖,加压炖煮 40 分钟。
|
||||
|
||||
### 收汁
|
||||
|
||||
- 在炖煮期间调制水淀粉。取碗 1 个,加入 1 汤匙淀粉,100ml 水,搅拌使其成为白色悬浊液
|
||||
- 炖煮时间结束后,打开高压锅锅盖,捡出锅中所有的配料,只保留猪肘。
|
||||
- 将高压锅中剩余的肉汤转移至铁锅内,猪肘转移至盘子或盆内
|
||||
- 将铁锅置于灶台上,开大火。在收汁过程中可以用筷子头蘸取锅内汤汁判断咸淡,并根据口味添加盐。注意,汤汁多的时候味道会比汤汁少的时候味道更淡,加入盐时需要考虑这一点。
|
||||
- 当肉汤沸腾时,注意观察剩余肉汤余量
|
||||
- 当剩余肉汤少于原肉汤体积的 1/2 时,再次搅拌之前调制好的水淀粉,并加入一半
|
||||
- 等待肉汤沸腾,加入剩下的一半
|
||||
- 等待肉汤沸腾,沸腾后等待 1-2 分钟关火,此时锅内的肉汤呈红棕色粘稠状
|
||||
- 用汤匙舀起肉汤均匀地淋在猪肘上,尽量使猪肘的每一处都淋到汤汁。如果在猪肘被完全淋到前汤汁已经用完则可直接上桌,否则剩余汤汁不需要再淋,可直接上桌。
|
||||
|
||||
## 附加内容
|
||||
|
||||
- 参考资料:[Bilibili老饭骨的视频教程](https://www.bilibili.com/video/BV1P4421c7s5)
|
||||
|
||||
<!-- 必须保留下面的文字。 -->
|
||||
如果您遵循本指南的制作流程而发现有问题或可以改进的流程,请提出 Issue 或 Pull request 。
|
||||
3
dishes/meat_dish/豉汁蒸白鱔/豉汁蒸白鱔.jpeg
Normal file
3
dishes/meat_dish/豉汁蒸白鱔/豉汁蒸白鱔.jpeg
Normal file
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:bb6248f7dcb2afd7290353238076851894806ea374c710545d923b665b877777
|
||||
size 63117
|
||||
84
dishes/meat_dish/豉汁蒸白鱔/豉汁蒸白鱔食谱.md
Normal file
84
dishes/meat_dish/豉汁蒸白鱔/豉汁蒸白鱔食谱.md
Normal file
@@ -0,0 +1,84 @@
|
||||
# 豉汁蒸白鱔的做法
|
||||
|
||||

|
||||
|
||||
预估烹饪难度:★★★
|
||||
|
||||
## 必备原料和工具
|
||||
|
||||
- 白鱔(白鳝)
|
||||
- 豆豉
|
||||
- 蒜头
|
||||
- 姜
|
||||
- 葱
|
||||
- 生抽
|
||||
- 老抽
|
||||
- 糖
|
||||
- 麻油
|
||||
- 生粉(可选)
|
||||
- 红椒(可选,装饰用)
|
||||
|
||||
### 工具
|
||||
|
||||
- 蒸锅或电蒸炉
|
||||
- 耐热盘(适合蒸的盘子)
|
||||
- 刀和砧板
|
||||
- 小碗(调酱汁用)
|
||||
|
||||
## 计算
|
||||
|
||||
一人份量
|
||||
|
||||
每份:
|
||||
|
||||
- 白鱔 250g (约一条小白鱔,已去内脏并切成段)
|
||||
- 豆豉 1 汤匙
|
||||
- 蒜头 2 瓣 (剁碎)
|
||||
- 姜 3 片 (切丝)
|
||||
- 葱 1 根 (切段或丝)
|
||||
- 生抽 1.5 汤匙
|
||||
- 老抽 0.5 茶匙
|
||||
- 糖 0.5 茶匙
|
||||
- 麻油 0.5 茶匙
|
||||
- 生粉 1 茶匙 (可选,用于腌制)
|
||||
- 水 1 汤匙 (调酱汁)
|
||||
- 红椒 少许 (切丝,装饰用)
|
||||
|
||||
## 操作
|
||||
|
||||
1. **检查与清洗白鱔**:
|
||||
- 购买时已请鱼贩去内脏、刮去黏液并切成约 5 厘米长的段。
|
||||
- 回家后检查白鱔,冲洗干净,确保无残留黏液或杂质。
|
||||
- 可选:用少许盐和 1 茶匙生粉轻搓白鱔段,腌制 5 分钟后冲洗干净,去腥并增加嫩滑口感。
|
||||
|
||||
2. **准备酱汁**:
|
||||
- 在小碗中混合 1 汤匙豆豉、2 瓣蒜末、1.5 汤匙生抽、0.5 茶匙老抽、0.5 茶匙糖、0.5 茶匙麻油和 1 汤匙水,搅拌均匀。
|
||||
- 若喜欢更浓郁的豉汁,可多加 0.5 汤匙豆豉。
|
||||
|
||||
3. **摆盘**:
|
||||
- 将已切好的白鱔段平铺在耐热盘中,尽量不重叠。
|
||||
- 将姜丝均匀撒在白鱔上。
|
||||
- 将调好的豉汁均匀淋在白鱔上。
|
||||
|
||||
4. **蒸制**:
|
||||
- 在蒸锅或电蒸炉中加入适量水,烧开至沸腾。
|
||||
- 将装有白鱔的盘子放入蒸锅,盖上锅盖。
|
||||
- 用中大火蒸约 8-10 分钟 (视白鱔段大小调整时间),至白鱔熟透但不过老 (肉质变白,无血水)。
|
||||
|
||||
5. **装饰与完成**:
|
||||
- 蒸好后取出,撒上葱丝和红椒丝 (可选) 作装饰。
|
||||
- 可再淋少许热麻油提升香气。
|
||||
- 趁热上桌,搭配白饭享用。
|
||||
|
||||
## 附加内容
|
||||
|
||||
- **注意事项**:
|
||||
- 确保白鱔新鲜,购买时选择活鱼,肉质更鲜嫩。
|
||||
- 鱼贩切段时可指定长度 (约 5 厘米为宜),方便蒸制和食用。
|
||||
- 蒸制时间不宜过长,以免白鱔肉质变韧。
|
||||
|
||||
- **变种做法**:
|
||||
- 可加入少许辣椒或 XO 酱,增加辣味和层次感。
|
||||
- 若喜欢更软嫩的口感,可在腌制时加入少许米酒。
|
||||
|
||||
如果您遵循本指南的制作流程而发现有问题或可以改进的流程,请提出 Issue 或 Pull Request。
|
||||
3
dishes/staple/意式肉酱面/final.jpg
Normal file
3
dishes/staple/意式肉酱面/final.jpg
Normal file
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:c4308dbfe8c650eaa64adfd1453267fa0fbef2576950f70413dc5cf049797bba
|
||||
size 168916
|
||||
3
dishes/staple/意式肉酱面/sauce.jpg
Normal file
3
dishes/staple/意式肉酱面/sauce.jpg
Normal file
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:1fd980ce8583f0e29743981d598f40bc4cfca7178ed79d9d4934aefbd1711968
|
||||
size 102009
|
||||
3
dishes/staple/意式肉酱面/spaghetti.jpg
Normal file
3
dishes/staple/意式肉酱面/spaghetti.jpg
Normal file
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:0beec4d401e3cc317cacba32b324f84eddbfae4f58baf741411f420b95b15a12
|
||||
size 169125
|
||||
47
dishes/staple/意式肉酱面/意式肉酱面.md
Normal file
47
dishes/staple/意式肉酱面/意式肉酱面.md
Normal file
@@ -0,0 +1,47 @@
|
||||
# 意式肉酱面的做法
|
||||
|
||||

|
||||
|
||||
意式肉酱面是一道非常容易做的菜,做得熟练的话,可以在 15 分钟内完成,从此告别方便面
|
||||
|
||||
预估烹饪难度:★
|
||||
|
||||
## 必备原料和工具
|
||||
|
||||
- 意大利面
|
||||
- 意大利面酱
|
||||
- 肉沫
|
||||
- 白洋葱(紫洋葱也可以)
|
||||
|
||||
## 计算
|
||||
|
||||
每次制作前需要确定计划做几份。一份正好够 2 个人吃。
|
||||
|
||||
每份:
|
||||
|
||||
- 意大利面 180 克(可以根据食量上下浮动)
|
||||
- 肉沫 80 克(可以根据食量上下浮动)
|
||||
- 洋葱大半个 (大约 150 克,通常是肉的两倍重)
|
||||
- 意大利面酱 300 克(可以看情况上下浮动)
|
||||
- 食用油 10-15ml
|
||||
|
||||
## 操作
|
||||
|
||||
- 锅中加水,烧开后放入意面(等待 6 - 12 分钟)
|
||||
- 在烧水的时候可以进行下面这些步骤,但请注意煮面的时间
|
||||
- 洋葱切成小丁
|
||||
- 空锅中倒油,中火下入洋葱碎
|
||||
- 时刻搅拌,注意不要让洋葱烧糊,直到洋葱变成半透明状
|
||||
- 下入肉沫,继续搅拌(搅散),直到肉末变成棕色
|
||||
- 加入意大利面酱,稍微搅拌一下即可
|
||||
- 把煮好的意大利面沥干水分并倒入肉酱中搅拌均匀即可(或者直接把做好的肉酱倒在意面上也行)
|
||||
|
||||
## 附加内容
|
||||
|
||||
- 意大利面分为很多不同的粗细,煮面条之前请注意意面盒子上标注的时间
|
||||
- 意大利面酱并不是番茄酱,平常用的番茄酱准确是叫番茄沙司,而意大利面酱虽然和番茄沙司都是调味过的番茄酱,但加的调味料不同
|
||||
|
||||

|
||||

|
||||
|
||||
如果您遵循本指南的制作流程而发现有问题或可以改进的流程,请提出 Issue 或 Pull request 。
|
||||
39
dishes/staple/电饭煲三文鱼炊饭/电饭煲三文鱼炊饭.md
Normal file
39
dishes/staple/电饭煲三文鱼炊饭/电饭煲三文鱼炊饭.md
Normal file
@@ -0,0 +1,39 @@
|
||||
# 电饭煲三文鱼炊饭的做法
|
||||
|
||||

|
||||
|
||||
预估烹饪难度:★★
|
||||
|
||||
## 必备原料和工具
|
||||
|
||||
- 有盐牛油
|
||||
- 三文鱼
|
||||
- 米
|
||||
- 粟米(可选)
|
||||
- 金菇(可选)
|
||||
- 冬菇(可选)
|
||||
|
||||
### 工具
|
||||
|
||||
- 电饭煲
|
||||
|
||||
## 计算
|
||||
|
||||
- 米 1 杯 / 人
|
||||
- 三文鱼 300g / 人
|
||||
- 水
|
||||
- 牛油一汤匙 / 人
|
||||
|
||||
## 操作
|
||||
|
||||
- 三文鱼去鳞,去骨
|
||||
- 金菇、冬菇切碎
|
||||
- 洗米三次
|
||||
- 把三文鱼、米、牛油放入电饭煲
|
||||
- 想口感浓厚一点,可以加多一汤匙牛油
|
||||
- 根据电饭煲的刻度放水
|
||||
- 把电饭煲調較至煲飯模式,等待大約 30 - 45 分鐘
|
||||
|
||||
## 附加内容
|
||||
|
||||
如果您遵循本指南的制作流程而发现有问题或可以改进的流程,请提出 Issue 或 Pull request 。
|
||||
3
dishes/staple/电饭煲三文鱼炊饭/电饭煲三文鱼炊饭.webp
Normal file
3
dishes/staple/电饭煲三文鱼炊饭/电饭煲三文鱼炊饭.webp
Normal file
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:9915bc185429d27e252c8847b89742088e556579490feb72da0eb17d7ea861b9
|
||||
size 81664
|
||||
61
dishes/staple/葱油拌面.md
Normal file
61
dishes/staple/葱油拌面.md
Normal file
@@ -0,0 +1,61 @@
|
||||
# 葱油拌面的做法
|
||||
|
||||
葱油拌面是一道经典的上海家常面点。做法简单,以其独特的葱油香味而闻名。富含碳水化合物和脂肪,能够快速补充能量。一般初学者只需要 20 分钟即可完成。是一道非常适合加班后的简单晚餐选择。
|
||||
|
||||
预估烹饪难度:★★
|
||||
|
||||
## 必备原料和工具
|
||||
|
||||
- 干面条
|
||||
- 小葱
|
||||
- 生抽
|
||||
- 老抽
|
||||
- 白糖
|
||||
|
||||
## 计算
|
||||
|
||||
葱油酱汁可以一次制作多份的量,分次使用。以下提供制作葱油酱汁的基础量,以及每份面条所需的葱油酱汁量。
|
||||
|
||||
葱油酱汁基础量 (约够 3-4 份使用):
|
||||
|
||||
- 小葱 100 g
|
||||
- 食用油 100 ml
|
||||
- 生抽 60 ml
|
||||
- 老抽 20 ml
|
||||
- 白糖 15 g
|
||||
|
||||
每份面条:
|
||||
|
||||
- 干面条 80 g (约相当于 150 g 湿面条)
|
||||
- 葱油酱汁 15 ml
|
||||
|
||||
## 操作
|
||||
|
||||
### 制作葱油酱汁
|
||||
|
||||
- 将 小葱 洗净,切成长段(约 5-7 cm)。葱白和葱绿可以分开。
|
||||
- 锅中加入 100 ml 食用油,中火烧热。先放入葱白段,煸炒至微黄。
|
||||
- 加入葱绿段,转小火,继续煸炒。
|
||||
- 保持小火,耐心煸炒约 **15-20 分钟**,直至葱段变得焦黄酥脆。
|
||||
- 将焦黄的葱段捞出(葱油保留在锅中)。
|
||||
- 在锅中的葱油中,加入 60 ml 生抽,20 ml 老抽,15 g 白糖。小火加热并搅拌,约 **1 分钟**,至糖溶解,酱汁混合均匀。立即关火。将制作好的葱油酱汁倒入容器中,放凉后密封保存。
|
||||
|
||||
### 煮面条 (按份操作)
|
||||
|
||||
- 取 80 g 干面条。
|
||||
- 锅中加入 1000 ml 饮用水,大火烧开。
|
||||
- 放入 面条,根据面条包装说明,煮至熟透(通常 **3-8 分钟**,以包装说明为准)。
|
||||
- 将 煮好的 面条 捞出,沥干水分,放入碗中。
|
||||
|
||||
### 混合拌面 (按份操作)
|
||||
|
||||
- 在装有 面条 的碗中,加入 15 ml 之前做好的 葱油酱汁。
|
||||
- 可以加入之前炸好的葱段(可选)。
|
||||
- 用 筷子 快速搅拌均匀,即可食用。
|
||||
|
||||
## 附加内容
|
||||
|
||||
- 炸葱油时,火一定要小,要有耐心,才能将葱的香味充分炸出。
|
||||
- 制作好的葱油酱汁可以冷藏保存一段时间,下次吃面时直接取用。
|
||||
|
||||
如果您遵循本指南的制作流程而发现有问题或可以改进的流程,请提出 Issue 或 Pull request 。
|
||||
55
dishes/vegetable_dish/凉拌豆腐.md
Normal file
55
dishes/vegetable_dish/凉拌豆腐.md
Normal file
@@ -0,0 +1,55 @@
|
||||
# 凉拌豆腐的做法
|
||||
|
||||
凉拌豆腐是一道清爽可口的家常凉菜。富含植物蛋白和钙质,低脂健康,非常适合夏季食用或作为日常佐餐。制作过程简单快捷,一般初学者只需要 10 分钟即可完成。
|
||||
|
||||
预估烹饪难度:★★
|
||||
|
||||
## 必备原料和工具
|
||||
|
||||
- 豆腐 (推荐选用北豆腐或老豆腐)
|
||||
- 小葱
|
||||
- 大蒜
|
||||
- 生抽
|
||||
- 香油
|
||||
- 醋(可选)
|
||||
- 白糖(可选)
|
||||
- 辣椒油(可选)
|
||||
|
||||
## 计算
|
||||
|
||||
每次制作前需要确定计划做几份。一份正好够 1 个人吃。
|
||||
|
||||
每份:
|
||||
|
||||
- 豆腐 250 g (约 1 块常见大小的豆腐)
|
||||
- 小葱 10 g
|
||||
- 大蒜 2-3 瓣
|
||||
- 生抽 15 ml
|
||||
- 香油 5 ml
|
||||
- 醋 5 ml(可选)
|
||||
- 白糖 2 g(可选)
|
||||
- 辣椒油 5 ml(可选)
|
||||
|
||||
## 操作
|
||||
|
||||
- 将 豆腐 切成 2 cm 见方的小块,备用。
|
||||
- 锅中加入 500 ml 饮用水,大火烧开。
|
||||
- 放入 豆腐 块,煮 **1-2 分钟**,以去除豆腥味并使豆腐口感更紧实。
|
||||
- 将 煮好的 豆腐 块捞出,沥干水分,放入碗中,备用。
|
||||
- 将 小葱 洗净,切成葱花,备用。
|
||||
- 将 大蒜 去皮,切成蒜末,备用。
|
||||
- 在一个干净的小碗中,加入 15 ml 生抽,5 ml 香油,5 ml 醋(可选),2 g 白糖(可选)。
|
||||
- 加入切好的 大蒜末。
|
||||
- 搅拌均匀,使 白糖 充分溶解,酱汁混合均匀。
|
||||
- 将制作好的酱汁均匀淋在 豆腐 块上。
|
||||
- 撒上切好的 小葱花。
|
||||
- 根据个人喜好,淋上 5 ml 辣椒油(可选)。
|
||||
- 用 筷子 或勺子轻轻拌匀,即可食用。
|
||||
|
||||
## 附加内容
|
||||
|
||||
- 制作凉拌豆腐时,建议选用质地较硬的北豆腐或老豆腐,不易碎裂,口感更佳。
|
||||
- 如果喜欢更清淡的口感,可以省略醋和辣椒油。
|
||||
- 酱汁的比例可以根据个人口味进行调整。
|
||||
|
||||
如果您遵循本指南的制作流程而发现有问题或可以改进的流程,请提出 Issue 或 Pull request 。
|
||||
55
dishes/vegetable_dish/凉拌金针菇.md
Normal file
55
dishes/vegetable_dish/凉拌金针菇.md
Normal file
@@ -0,0 +1,55 @@
|
||||
# 凉拌金针菇的做法
|
||||
|
||||
凉拌金针菇是一道简单快捷的开胃凉菜。口感脆嫩爽滑,富含膳食纤维和多种维生素。制作过程无需复杂的烹饪技巧,非常适合新手和忙碌时快速准备。一般初学者只需要 10 分钟即可完成。
|
||||
|
||||
预估烹饪难度:★★
|
||||
|
||||
## 必备原料和工具
|
||||
|
||||
- 金针菇
|
||||
- 小葱
|
||||
- 大蒜
|
||||
- 生抽
|
||||
- 醋
|
||||
- 白糖(可选)
|
||||
- 香油(可选)
|
||||
- 辣椒油(可选)
|
||||
|
||||
## 计算
|
||||
|
||||
每次制作前需要确定计划做几份。一份正好够 1 个人吃。
|
||||
|
||||
每份:
|
||||
|
||||
- 金针菇 150 g (约 1 小包)
|
||||
- 小葱 5 g
|
||||
- 大蒜 2 瓣
|
||||
- 生抽 15 ml
|
||||
- 醋 10 ml
|
||||
- 白糖 3 g(可选)
|
||||
- 香油 5 ml(可选)
|
||||
- 辣椒油 5 ml(可选)
|
||||
|
||||
## 操作
|
||||
|
||||
- 将 金针菇 根部切除,用清水冲洗干净,备用。
|
||||
- 将 小葱 洗净,切成葱花,备用。
|
||||
- 将 大蒜 去皮,切成蒜末,备用。
|
||||
- 锅中加入 1000 ml 饮用水,大火烧开。
|
||||
- 放入 金针菇,煮 **1-2 分钟**,至金针菇变软。
|
||||
- 将 煮好的 金针菇 捞出,沥干水分,放入一个较大的碗中,备用。
|
||||
- 在另一个干净的小碗中,加入 15 ml 生抽,10 ml 醋,3 g 白糖(可选),5 ml 香油(可选)。
|
||||
- 加入切好的 大蒜末。
|
||||
- 搅拌均匀,使 白糖 充分溶解,酱汁混合均匀。
|
||||
- 将制作好的酱汁均匀淋在 金针菇 上。
|
||||
- 撒上切好的 小葱花。
|
||||
- 根据个人喜好,淋上 5 ml 辣椒油(可选)。
|
||||
- 用 筷子 轻轻拌匀,即可食用。
|
||||
|
||||
## 附加内容
|
||||
|
||||
- 金针菇焯水时间不宜过长,以免影响口感。
|
||||
- 酱汁的比例可以根据个人口味喜好进行调整。
|
||||
- 如果不喜欢吃辣,可以省略辣椒油。
|
||||
|
||||
如果您遵循本指南的制作流程而发现有问题或可以改进的流程,请提出 Issue 或 Pull request 。
|
||||
44
dishes/vegetable_dish/清炒花菜.md
Normal file
44
dishes/vegetable_dish/清炒花菜.md
Normal file
@@ -0,0 +1,44 @@
|
||||
# 清炒花菜的做法
|
||||
|
||||
清炒花菜是一道常见的家常素菜。富含维生素 C 和膳食纤维,口感脆嫩。做法简单,是一道快速上手的炒菜。一般初学者只需要 15 分钟即可完成。
|
||||
|
||||
预估烹饪难度:★★
|
||||
|
||||
## 必备原料和工具
|
||||
|
||||
- 花菜
|
||||
- 大蒜
|
||||
- 盐
|
||||
|
||||
## 计算
|
||||
|
||||
每次制作前需要确定计划做几份。一份正好够 2 个人食用(作为配菜)。
|
||||
|
||||
每份:
|
||||
|
||||
- 花菜 约 300 g (约 1/2 中等大小的花菜)
|
||||
- 大蒜 2-3 瓣
|
||||
- 盐 3 g
|
||||
- 食用油 15 ml
|
||||
- 饮用水 50 ml (用于炒制过程)
|
||||
|
||||
## 操作
|
||||
|
||||
- 将 花菜 洗净,用刀或手掰成小朵,粗茎部分可以切片,备用。
|
||||
- 将 大蒜 去皮,切成蒜片,备用。
|
||||
- 锅中加入 1000 ml 饮用水,大火烧开。
|
||||
- 放入 花菜 朵,煮 **2-3 分钟**,至花菜颜色变浅,口感稍微软化。
|
||||
- 将 煮好的 花菜 捞出,沥干水分,备用。
|
||||
- 热锅,加入 15 ml 食用油,大火烧热。
|
||||
- 放入 蒜片,快速煸炒出香味。
|
||||
- 放入 焯好水的 花菜 朵,转中大火,快速翻炒约 **2 分钟**,使花菜均匀受热。
|
||||
- 加入 3 g 盐,继续翻炒均匀。
|
||||
- 沿锅边淋入 50 ml 饮用水,盖上锅盖,焖 **1 分钟**,帮助花菜完全熟透入味。
|
||||
- 开盖,快速翻炒均匀,即可出锅。
|
||||
|
||||
## 附加内容
|
||||
|
||||
- 提前将花菜焯水可以缩短炒制时间,并使花菜更容易熟透。
|
||||
- 炒制时间可以根据个人喜欢的花菜软硬程度调整。喜欢脆一些可以缩短时间。
|
||||
|
||||
如果您遵循本指南的制作流程而发现有问题或可以改进的流程,请提出 Issue 或 Pull request 。
|
||||
37
dishes/vegetable_dish/清蒸南瓜.md
Normal file
37
dishes/vegetable_dish/清蒸南瓜.md
Normal file
@@ -0,0 +1,37 @@
|
||||
# 清蒸南瓜的做法
|
||||
|
||||
清蒸南瓜是一道制作极其简单的家常甜点或主食。它最大程度地保留了南瓜本身的天然甜味和营养,口感软糯。是健康饮食的不错选择。一般初学者只需要 15-20 分钟即可完成(主要为蒸的时间)。
|
||||
|
||||
预估烹饪难度:★
|
||||
|
||||
## 必备原料和工具
|
||||
|
||||
- 南瓜
|
||||
- 蒸锅
|
||||
|
||||
## 计算
|
||||
|
||||
每次制作前需要确定计划做几份。一份正好够 1-2 个人吃。
|
||||
|
||||
每份:
|
||||
|
||||
- 南瓜 300 g
|
||||
- 饮用水 1000 ml (用于蒸锅)
|
||||
|
||||
## 操作
|
||||
|
||||
- 将 南瓜 外皮洗净,去除瓜瓤和籽。
|
||||
- 将 南瓜 切成厚度大约 2 cm 的片,备用。
|
||||
- 在 蒸锅 的锅中加入 1000 ml 饮用水。
|
||||
- 将切好的 南瓜 片均匀摆放在盘中。
|
||||
- 待蒸锅中的水烧开后,将装有 南瓜 的盘子放入蒸锅中。
|
||||
- 盖上锅盖,保持大火蒸 **15-20 分钟**,直至南瓜变软,可以用筷子轻松穿透。
|
||||
- 关火,小心取出盘子。
|
||||
|
||||
## 附加内容
|
||||
|
||||
- 南瓜的品种不同,甜度和口感会有差异。老南瓜通常更甜更面。
|
||||
- 南瓜皮含有营养,如果喜欢也可以不去皮蒸,但需要彻底洗净。
|
||||
- 蒸的时间取决于南瓜块的大小和厚度,以及南瓜的品种。用筷子测试是判断是否蒸熟的好方法。
|
||||
|
||||
如果您遵循本指南的制作流程而发现有问题或可以改进的流程,请提出 Issue 或 Pull request 。
|
||||
BIN
dishes/vegetable_dish/蒜蓉空心菜/1.JPG
Normal file
BIN
dishes/vegetable_dish/蒜蓉空心菜/1.JPG
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 285 KiB |
46
dishes/vegetable_dish/蒜蓉空心菜/蒜蓉空心菜.md
Normal file
46
dishes/vegetable_dish/蒜蓉空心菜/蒜蓉空心菜.md
Normal file
@@ -0,0 +1,46 @@
|
||||
# 蒜蓉空心菜的做法
|
||||
|
||||
背景:
|
||||
|
||||
曾经去学校附近的川菜馆吃过蒜蓉空心菜,之后就一直很喜欢吃。
|
||||
|
||||
预估烹饪难度:★★
|
||||
|
||||
## 必备原料和工具
|
||||
|
||||
* 空心菜
|
||||
* 蒜末
|
||||
* 盐
|
||||
* 生抽
|
||||
* 筷子
|
||||
* 铲子
|
||||
|
||||
## 计算
|
||||
|
||||
每份:
|
||||
|
||||
* 新鲜空心菜 250 g
|
||||
* 大蒜半个,切碎为蒜末
|
||||
* 食用油 45 ml
|
||||
* 盐 2 g
|
||||
* 白糖 3 g
|
||||
* 生抽 8 ml
|
||||
|
||||
## 操作
|
||||
|
||||
* 空心菜洗净,去掉烂叶或者老梗,均匀切成 2 段或者 3 段(防止过长不好炒)
|
||||
* 锅里先倒少量油,烧至微微冒烟,此时拿起锅将国内的热油向四周浸润,让油均匀覆盖锅底,然后再倒入剩余的油([热锅凉油法](https://cook.aiursoft.cn/tips/learn/%E5%AD%A6%E4%B9%A0%E7%82%92%E4%B8%8E%E7%85%8E/?h=%E7%83%AD%E9%94%85#_5))。
|
||||
* 放入蒜末,小火炒 10 到 15 秒煸香
|
||||
* 尽快均匀地放入空心菜,**开大火**,左手拿铲子,右手拿筷子,配合将空心菜不停翻动,**直至软化变绿**。
|
||||
* 接着不需使用筷子,而是使用铲子快速翻炒已软化的空心菜 15 - 20 秒,使之受热更均匀,撒入盐 2 g ,白糖 3 g,生抽 8 ml。
|
||||
* 继续大火翻炒 10 秒,即可出锅。
|
||||
|
||||

|
||||
|
||||
## 附加内容
|
||||
|
||||
* 空心菜尽量选择新鲜,鲜嫩的,否则炒出来口感可能会比较老
|
||||
* 实际放入空心菜的量可以根据锅的大小决定,建议不超过一个锅,否则太多的话开始的翻动阶段和后续的翻炒,容易掉出少量空心菜到灶台
|
||||
* 炒空心菜时,一定要**开大火**,这样空心菜才能快速变软的同时保持脆嫩的口感,大火也有利于炒出生抽的香味。
|
||||
|
||||
如果您遵循本指南的制作流程而发现有问题或可以改进的流程,请提出 Issue 或 Pull request 。
|
||||
42
dishes/vegetable_dish/蒜蓉西兰花.md
Normal file
42
dishes/vegetable_dish/蒜蓉西兰花.md
Normal file
@@ -0,0 +1,42 @@
|
||||
# 蒜蓉西兰花的做法
|
||||
|
||||
预估烹饪难度:★★
|
||||
|
||||
## 必备原料和工具
|
||||
|
||||
- 西兰花 1 个
|
||||
- 大蒜 3-4 瓣
|
||||
- 生抽
|
||||
- 蚝油
|
||||
- 白糖
|
||||
|
||||
## 计算
|
||||
|
||||
每次制作前需要确定计划做几份。一份正好够 2 个人吃。
|
||||
|
||||
每份:
|
||||
|
||||
- 西兰花 约 200 g (约 1/2 中等大小的西兰花)
|
||||
- 大蒜 3-4 瓣
|
||||
- 生抽 10 ml
|
||||
- 蚝油 5 ml
|
||||
- 白糖 2 g
|
||||
|
||||
## 操作
|
||||
|
||||
- 将 西兰花 切成小朵,清洗干净。
|
||||
- 将 大蒜 去皮,切成蒜末,备用。
|
||||
- 锅中加入 1000 ml 饮用水,大火烧开。
|
||||
- 放入 西兰花,保持大火 **煮 2-3 分钟**,至 西兰花 颜色变翠绿,口感变软。
|
||||
- 将 煮好的 西兰花 捞出,沥干水分,摆入盘中,备用。
|
||||
- 热锅,加入 10 ml 食用油。油温升高后,放入 大蒜末,小火煸炒出香味。
|
||||
- 加入 10 ml 生抽,5 ml 蚝油,2 g 白糖,加入 30 ml 饮用水。
|
||||
- 将锅中汤汁烧开。
|
||||
- 将烧好的蒜蓉汁 均匀淋在盘中的 西兰花 上。
|
||||
|
||||
## 附加内容
|
||||
|
||||
- 焯水时间不宜超过推荐时长,以免影响西兰花的口感和营养。
|
||||
- 如果想保留西兰花更脆的口感,可以缩短焯水时间。
|
||||
|
||||
如果您遵循本指南的制作流程而发现有问题或可以改进的流程,请提出 Issue 或 Pull request 。
|
||||
@@ -38,8 +38,11 @@
|
||||
- 过滤蛋液,去掉蛋液中的浮沫(可选,不过滤蒸出来的蛋会有气泡导致不好看)
|
||||
- 向任意一口锅中加入 50ml 清水,水烧开后,放入盛有鸡蛋液的碗
|
||||
- 蒸碗要盖上一个盖子,倒扣一个有凹槽的铁碟子,或者使用保鲜膜来减少水汽进入,这是为了避免其变成蜂窝状
|
||||
- **中火**蒸 **10 分钟**,
|
||||
- 关火,再闷上 5 分钟
|
||||
- 蒸煮步骤(二选一)
|
||||
1. 开**中火**蒸**10 分钟**, 10 分钟之后关火再闷上**5 分钟**。
|
||||
2. 开**大火**蒸**5 分钟**,要保持锅中水一直处于沸腾状态,否则要延长时间。每隔**2 分钟**开盖一次释放水蒸气,开盖过晚蛋羹容易变成蜂窝状;开盖太早/频繁蒸的时间需要久一些。
|
||||
- 如何判断已经熟了?
|
||||
- 晃动碗,蛋羹不再处于液体状态,拥有类似果冻的 Q 弹状态即可出锅。
|
||||
- 出锅
|
||||
- 加入香油和生抽即可享用
|
||||
- 也可用藤椒油代替香油,增加麻爽口感
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
* [速冻汤圆](./../dishes/semi-finished/速冻汤圆/速冻汤圆.md)
|
||||
* [奶油蘑菇汤](./../dishes/soup/奶油蘑菇汤.md)
|
||||
* [朱雀汤](./../dishes/soup/朱雀汤/朱雀汤.md)
|
||||
* [意式肉酱面](./../dishes/staple/意式肉酱面/意式肉酱面.md)
|
||||
* [煮泡面加蛋](./../dishes/staple/煮泡面加蛋.md)
|
||||
* [电饭煲蒸米饭](./../dishes/staple/米饭/电饭煲蒸米饭.md)
|
||||
* [老干妈拌面](./../dishes/staple/老干妈拌面.md)
|
||||
@@ -24,4 +25,5 @@
|
||||
* [麻油拌面](./../dishes/staple/麻油拌面.md)
|
||||
* [凉拌油麦菜](./../dishes/vegetable_dish/凉拌油麦菜.md)
|
||||
* [凉拌黄瓜](./../dishes/vegetable_dish/凉拌黄瓜.md)
|
||||
* [清蒸南瓜](./../dishes/vegetable_dish/清蒸南瓜.md)
|
||||
* [炒滑蛋](./../dishes/vegetable_dish/炒滑蛋/炒滑蛋.md)
|
||||
@@ -44,7 +44,9 @@
|
||||
* [微波炉腊肠煲仔饭](./../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)
|
||||
@@ -53,9 +55,12 @@
|
||||
* [麻辣减脂荞麦面](./../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)
|
||||
@@ -63,6 +68,8 @@
|
||||
* [芹菜拌茶树菇](./../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)
|
||||
|
||||
@@ -57,6 +57,7 @@
|
||||
* [肉饼炖蛋](./../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)
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
* [红烧鲤鱼](./../dishes/aquatic/红烧鲤鱼.md)
|
||||
* [葱油桂鱼](./../dishes/aquatic/葱油桂鱼/葱油桂鱼.md)
|
||||
* [香煎翘嘴鱼](./../dishes/aquatic/香煎翘嘴鱼/香煎翘嘴鱼.md)
|
||||
* [糖色](./../dishes/condiment/糖色.md)
|
||||
* [简易版炒糖色](./../dishes/condiment/简易版炒糖色.md)
|
||||
* [咖啡椰奶冻](./../dishes/dessert/咖啡椰奶冻/咖啡椰奶冻.md)
|
||||
* [提拉米苏](./../dishes/dessert/提拉米苏/提拉米苏.md)
|
||||
* [烤蛋挞](./../dishes/dessert/烤蛋挞/烤蛋挞.md)
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
* [水煮肉片](./../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)
|
||||
|
||||
44
tips/advanced/糖色的炒制.md
Normal file
44
tips/advanced/糖色的炒制.md
Normal file
@@ -0,0 +1,44 @@
|
||||
# 糖色的炒制
|
||||
|
||||
原理: 糖遇高温融化,且在加热不同时间后呈不同性状
|
||||
|
||||
以炒制 200ml 糖色为例
|
||||
|
||||
## 水炒
|
||||
|
||||
1. 取**锅底有弧度**或**平底面积占1/3以下**的锅
|
||||
2. 向锅中加入 8g 冰糖、白砂糖或绵白糖,以冰糖为佳,如果希望糖色甜味更明显可以增加 2g 左右
|
||||
3. 向锅中加入 50ml 70°C 热水
|
||||
4. 将锅置于灶台上
|
||||
5. 如使用燃气灶,应将火力调整由大向小调整至最小,使火焰范围不超过水面面积,如使用电磁炉具,开至最小,并时刻准备关闭电源
|
||||
6. 使用锅铲不断搅拌糖水混合物,如果为冰糖此时可以使用锅铲背面或边缘轻轻敲打至粉碎以加速融化,在此过程中如果出现糖尚未融化而已经开始变色的现象,则需要继续加入热水至 50ml
|
||||
7. 待糖全部融化后,糖水混合物呈现粘稠状态而颜色呈透明偏白色,如云母颜色,此时应继续搅拌
|
||||
8. 继续搅拌糖水混合物,糖水混合物颜色逐渐呈现白色
|
||||
9. 继续搅拌糖水混合物,糖水混合物颜色开始出现浅浅的棕色
|
||||
10. 继续搅拌糖水混合物,糖水混合物颜色棕色十分明显
|
||||
11. 继续搅拌糖水混合物,糖水混合物颜色呈棕色并出现绵密的气泡
|
||||
12. 继续搅拌糖水混合物,糖水混合物颜色呈棕色并出现绵密的气泡,绵密的小气泡中出现了较大的气泡
|
||||
13. 向锅中加入 150ml 70°C 热水,此时锅中的液体呈现出深红棕色,颜色透明清澈,有淡淡焦糖味
|
||||
14. 倒入碗中,获得糖色 200ml
|
||||
|
||||
## 油炒(Recommanded)
|
||||
|
||||
1. 同水炒
|
||||
2. 同水炒
|
||||
3. 向锅中加入 10ml 常温食用油
|
||||
4. 同水炒,糖水混合物改为糖油混合物,最后加入 190ml 热水,其余略
|
||||
|
||||
## 附糖浆状态及其用途说明
|
||||
|
||||
|状态|制备方法|用途(例)|
|
||||
|:--:|:--:|:--:|
|
||||
|未完全融化糖浆|水(油)炒8|挂霜山楂|
|
||||
|完全融化糖浆|水(油)炒9|冰糖葫芦|
|
||||
|焦糖|水(油)炒11后自然冷却|焦糖|
|
||||
|糖色|水(油)炒13|糖色|
|
||||
|
||||
* 当使用糖色烹饪如红烧肉等单位体积较小的食物时,可以在第 13 步之前直接加入食材快速翻炒至锅底无明显液体堆积,此时再加入水,这样可以更快上色
|
||||
|
||||
## 附加内容
|
||||
|
||||
如果您遵循本指南的制作流程而发现有问题或可以改进的流程,请提出 Issue 或 Pull request 。
|
||||
50
tips/厨房准备.md
50
tips/厨房准备.md
@@ -59,55 +59,23 @@
|
||||
|
||||
饱和脂肪酸会增加肥胖、高胆固醇、心脏病的风险。
|
||||
|
||||
尤其注意反式脂肪酸,因为它会增加血液中的低密度脂蛋白胆固醇,还会减少高密度脂蛋白胆固醇,从而增加心脏病的风险。
|
||||
研究表明,长期过量食用氢化加工产生的反式脂肪酸可引起人体血脂代谢异常,从而增加心血管疾病发生的风险。也有研究显示可能会增加糖尿病、肥胖等慢性疾病的患病风险。
|
||||
|
||||
### 零食的反式脂肪酸
|
||||
世界卫生组织建议:为增进心血管健康,应尽量控制膳食中的反式脂肪酸,最大摄取量不超过总能量的 1%。也就是说,如果按一个成年人平均每天摄入能量 2000 千卡来算,则每天摄入反式脂肪酸不应超过 2.2 克。
|
||||
|
||||
下列配料表中的项目有较高可能含有反式脂肪酸:
|
||||
GB 28050-2011 规定,食品配料含有或生产过程中使用了氢化和(或)部分氢化油脂时,在营养成分表中还应标示出反式脂肪(酸)的含量。
|
||||
|
||||
* 氢化植物油
|
||||
* 起酥油
|
||||
* 人造黄油
|
||||
* 植物黄油
|
||||
* 氢化脂肪
|
||||
* 植物奶油
|
||||
* 精炼植物油
|
||||
### 食品中的的反式脂肪酸
|
||||
|
||||
但有些高品质的零食并不含反式脂肪酸。实际以零食的营养成分表中标注的 `反式脂肪` 含量为准。
|
||||
根据相关调查,焙烤食品(糕点、饼干、面包等)、调味品、油炸食品的反式脂肪酸平均含量在 0.30~0.50 g/100g 之间。
|
||||
|
||||
### 油品的反式脂肪酸
|
||||
因此不必太过担心——日常食品中的反式脂肪酸并不足以危害健康。但以防万一,在选购零食时,不妨关注营养成分表中标注的 `反式脂肪(酸)` 含量。
|
||||
|
||||
虽然许多零食中含有反式脂肪酸,但是更多的来源并不是氢化,而是加工过程中产生的。
|
||||
### 烹饪中的反式脂肪酸
|
||||
|
||||
反式脂肪酸的主要加工来源有:
|
||||
据 2021 年调查显示,我国植物油的反式脂肪酸平均含量为 0.86 g/100g,无需太过担心。
|
||||
|
||||
* 植物油 (主要来源)
|
||||
* 糕点
|
||||
* 饼干
|
||||
* 油炸食品
|
||||
* 面包
|
||||
|
||||
植物油有:
|
||||
|
||||
* 菜籽油
|
||||
* 茶籽油
|
||||
* 大豆油
|
||||
* 调和油
|
||||
* 橄榄油
|
||||
* 花生油
|
||||
* 葵籽油
|
||||
* 玉米油
|
||||
* 芝麻油
|
||||
* 棕榈油
|
||||
* 椰子油
|
||||
* 棉籽油
|
||||
* 芥花油
|
||||
|
||||
它们都含有少量的反式脂肪酸,因为在精炼过程中需要在高温下进行脱臭处理。
|
||||
|
||||
市售高品质植物油的反式脂肪酸一般介于 0%~3% 之间,随着油品工艺不断革新,其中的反式脂肪酸含量也在不断降低。
|
||||
|
||||
而真正的反式脂肪酸来源是烹饪过程:
|
||||
要额外注意的反式脂肪酸来源是烹饪过程:
|
||||
|
||||
植物油中往往含有较高比例的多不饱和脂肪酸,热稳定性比较差,容易在高温下转化成反式脂肪。
|
||||
|
||||
|
||||
Reference in New Issue
Block a user