如何将参数传递给询问者问题?

How to pass parameters to a inquirer question?

如何将参数传递给询问者问题,以便我可以根据先前问题的值或提示外的代码设置问题对象的值?

如果基于上一个问题的答案,我能看到实现此目的的唯一方法是嵌套询问者提示调用

const inquirer = require('inquirer');

function getPath(){
    return {
        'system1':`system1path`,
        'system2':`system2path`,
        'system3':`system3path`
    }
}

inquirer.prompt([
     {
        type: 'list',
        name: 'testSystem',
        message: 'Which system do you want to run?',
        choices: ['system1', 'system2', 'system3']
    },
    {
        type: 'fuzzypath',
        name: 'searchTestSuite',
        excludePath: nodePath => nodePath.startsWith('node_modules'),
        itemType: 'any',
        rootPath: getPath()['< answer from question(testSystem) >'],
        message: 'Select a target directory :',
        default: `system1path`,
        suggestOnly: false,
        depthLimit: 6,
    },

]).then(answers => {
    console.log(answers);
});

预期结果: 如果你 select testSystem = system2 您应该获得 rootPath = system2Path ,无需嵌套询问者提示或使用 when 函数(因为 when 似乎正在处理布尔值)

你可以通过嵌套来解决它​​,但是从 Promise.then 更改为 async-await 会使它更具可读性。 Inquirer.js 使用 promises,因此您可以使用 await 来捕获提示答案,并通过发出多个提示来保存提示之间的状态。请参阅下面的代码。

PS:我已经从 fuzzypath 中删除了 default: ..., 参数,因为它会产生默认值,尽管它位于根路径之外。

const inquirer = require('inquirer');
inquirer.registerPrompt('fuzzypath', require('inquirer-fuzzy-path'))

const system1path = ...;
const system2path = ...;
const system3path = ...;

function getPath(){
    return {
        'system1': `${system1path}`,
        'system2': `${system2path}`,
        'system3': `${system3path}`
    };
}

(async function () {
    const {testSystem} = await inquirer.prompt({
        type: 'list',
        name: 'testSystem',
        message: 'Which system do you want to run?',
        choices: ['system1', 'system2', 'system3']
    });
    const {searchTestSuite} = await inquirer.prompt({
        type: 'fuzzypath',
        name: 'searchTestSuite',
        excludePath: nodePath => nodePath.startsWith('node_modules'),
        itemType: 'any',
        rootPath: getPath()[testSystem],
        message: 'Select a target directory :',
        suggestOnly: false,
        depthLimit: 6,
    });
    console.log({testSystem, searchTestSuite});
})();