如何从 yeoman 上下文中的 `this.prompt` 获取存储的选项?

how to get stored options from `this.prompt` inside yeoman context?

基本上,yeoman 会强制您向开发人员询问您需要的一切。虽然,这是一件好事,你可以存储一些东西,在未来的运行中,这些东西将为开发人员自动完成。关键是我不想问开发人员他是否已经回答了那个问题。

这里是基本的 yeoman 生成器示例(name 将被保存并稍后自动完成):

var yeoman = require('yeoman-generator');

module.exports = yeoman.generators.Base.extend({
  init: function () {
    var cb = this.async();

    this.prompt([{
      name: 'name',
      message: 'your name:',
      store: true,
    }, {
      name: 'moduleName',
      message: 'module name:'
    }], function (props) {
      console.log(
        props.name,      // developer’s name
        props.moduleName // module’s name
      )
    }.bind(this));
  },
}
});

问题是如何在 yeoman 上下文中从 this.prompt 中获取存储的选项来执行以下操作:

this.prompt([!this.name.stored && {
  name: 'name', // so after first run this will never be asked again
  message: 'your name:',
  store: true,
}, {
  name: 'moduleName',
  message: 'module name:'
}], function (props) {
  console.log(
    props.name,      // developer’s name
    props.moduleName // module’s name
  )
}.bind(this));

无法 public 访问存储的先前提示答案。

如果你想缓存一些数据并在以后访问它,那么使用 storage functionality (this.config)

FWIW,提示缓存存储在私有 this._globalConfig 中。我添加这个细节是为了完整性,你可能不应该使用它。

您可以添加一个 config.js 来存储和读取用户主目录中的信息作为 config.json 文件,以后应用程序可以读取这个可以用作默认文件的文件。

{
    name: 'authorName',
    message: 'What\'s your name?',
    'default': self.defaultAuthorName
}

查看 https://www.npmjs.com/package/generator-yo-wordpress 开发人员在何处使用 config.js 文件。

您可以将默认值用作函数,其中第一个参数是先前存储的答案:

const answers = await this.prompt([
  {
    type: 'input',
    name: 'projectName',
    message: 'Your project id',
    default: this.appname,
    store: true
  },
  {
    type: 'input',
    name: 'projectTitle',
    message: 'Your project title',
    default: ({ projectName }) => projectName
  },
])