You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Inquirer生成README:renderBadge结果无法传入generateREADME求助

问题描述

我是一名训练营学员,在使用Inquirer获取输入生成README文件时遇到了问题。无法将renderBadge(license)函数的结果传入generateREADME函数,renderBadge()仅用于处理Inquirer中的许可证部分,但无法将这部分信息传递给生成函数并显示。执行函数后,模板中的${badge}显示为undefined,请问该如何解决?我哪里出错了?提前感谢!

执行结果截图

执行结果

原始代码

const inquirer = require("inquirer");
const fs = require("fs");

const generateREADME = ({ title, description, installation, usage, contributions, tests, license, github, email, badge }) =>
    `# ${title} 
    ${badge}
    
    ## Description

    ${description}

    (Rest of Readme Generation here)
    `

inquirer
    .prompt([
        { 
            // 其他提问内容
        },
        {
            type: "list",
            name: "license",
            message: "What license is your project?",
            choices: [
            "Apache 2.0",
            "Boost",
            "GNU AGPL v3",
            "MIT",
            "Perl",
            "other",
            ],
            validate: (licenseInput) => {
            if (licenseInput) {
                return true;
            } else {
                console.log(`Please enter your project's license!`);
                return false;
            }
            },
        }
    ])
    .then((answers) => {
      const readmePageContent = generateREADME(answers);
      renderBadge(answers)

        fs.writeFile('README.md', readmePageContent, (err) => {
            err ? console.log(err) : console.log('Successfully generated README!')
        })
    })

function renderBadge(license) {
    let badge = ''
    if (license === 'Apache 2.0') {
        badge = `![License](https://img.shields.io/badge/License-Apache_2.0-blue.svg)]`
    } else if (license === 'Boost') {
        badge = `![License](https://img.shields.io/badge/License-Boost_1.0-lightblue.svg)]`
    } else if (license === 'GNU APGL v3') {
        badge = `![License: AGPL v3](https://img.shields.io/badge/License-AGPL_v3-blue.svg)]`
    } else if (license === 'MIT') {
        badge = `![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)]`
    } else if (license === 'Perl') {
        badge = `![License: Artistic-2.0](https://img.shields.io/badge/License-Perl-0298c3.svg)]`
    } else {
        badge = ''
    }
    return badge;
    generateREADME(badge)
}

错误原因及修复方案

错误点:

  1. 未将badge注入answers对象:调用generateREADME(answers)时,answers里没有badge字段——Inquirer没收集这个数据,需要手动计算后添加进去。
  2. renderBadge参数处理错误:函数接收的是整个answers对象,但代码里直接把它当成license字符串判断,应该取license.license属性。
  3. renderBadge内无效代码:return badge之后的generateREADME(badge)永远不会执行,属于冗余代码。
  4. 条件判断拼写错误:GNU AGPL v3的判断条件写成了GNU APGL v3,会导致该许可证的badge无法生成。
  5. badge格式错误:所有badge字符串末尾多了一个],会导致图片显示异常。

修复步骤:

  1. 修改renderBadge函数,接收answers对象并提取许可证值,同时修正拼写和格式问题:
function renderBadge(answers) {
    let badge = ''
    const license = answers.license; // 提取许可证值
    if (license === 'Apache 2.0') {
        badge = `![License](https://img.shields.io/badge/License-Apache_2.0-blue.svg)`
    } else if (license === 'Boost') {
        badge = `![License](https://img.shields.io/badge/License-Boost_1.0-lightblue.svg)`
    } else if (license === 'GNU AGPL v3') { // 修正拼写错误
        badge = `![License: AGPL v3](https://img.shields.io/badge/License-AGPL_v3-blue.svg)`
    } else if (license === 'MIT') {
        badge = `![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)`
    } else if (license === 'Perl') {
        badge = `![License: Artistic-2.0](https://img.shields.io/badge/License-Perl-0298c3.svg)`
    } else {
        badge = ''
    }
    return badge;
}
  1. 在then回调中,先计算badge并合并到answers,再调用generateREADME:
.then((answers) => {
    const badge = renderBadge(answers); // 获取生成的badge
    const readmePageContent = generateREADME({ ...answers, badge }); // 将badge注入answers
    fs.writeFile('README.md', readmePageContent, (err) => {
        err ? console.log(err) : console.log('Successfully generated README!')
    })
})

修复后完整代码

const inquirer = require("inquirer");
const fs = require("fs");

const generateREADME = ({ title, description, installation, usage, contributions, tests, license, github, email, badge }) =>
    `# ${title} 
    ${badge}
    
    ## Description

    ${description}

    (Rest of Readme Generation here)
    `

inquirer
    .prompt([
        { 
            // 其他提问内容
        },
        {
            type: "list",
            name: "license",
            message: "What license is your project?",
            choices: [
            "Apache 2.0",
            "Boost",
            "GNU AGPL v3",
            "MIT",
            "Perl",
            "other",
            ],
            validate: (licenseInput) => {
            if (licenseInput) {
                return true;
            } else {
                console.log(`Please enter your project's license!`);
                return false;
            }
            },
        }
    ])
    .then((answers) => {
        const badge = renderBadge(answers);
        const readmePageContent = generateREADME({ ...answers, badge });
        fs.writeFile('README.md', readmePageContent, (err) => {
            err ? console.log(err) : console.log('Successfully generated README!')
        })
    })

function renderBadge(answers) {
    let badge = ''
    const license = answers.license;
    if (license === 'Apache 2.0') {
        badge = `![License](https://img.shields.io/badge/License-Apache_2.0-blue.svg)`
    } else if (license === 'Boost') {
        badge = `![License](https://img.shields.io/badge/License-Boost_1.0-lightblue.svg)`
    } else if (license === 'GNU AGPL v3') {
        badge = `![License: AGPL v3](https://img.shields.io/badge/License-AGPL_v3-blue.svg)`
    } else if (license === 'MIT') {
        badge = `![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)`
    } else if (license === 'Perl') {
        badge = `![License: Artistic-2.0](https://img.shields.io/badge/License-Perl-0298c3.svg)`
    } else {
        badge = ''
    }
    return badge;
}

内容的提问来源于stack exchange,提问作者joonkidk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 09:50:17