yeoman子生成器如何访问在主生成器上定义的变量

How can a yeoman sub-generator access variables defined on the main generator?

本文关键字:定义 变量 何访问 yeoman 访问      更新时间:2023-09-26

我正在做一个子生成器,我想将主生成器上定义的变量传递给这个子生成器:类似的东西:

  writing: function() {
    console.log(this.appversion);
    var email = this.email; // Variable defined on the main controller.
    this.fs.copy(
      this.templatePath('somefile.js'),
      this.destinationPath('somefile.js')
    );

我试着在主生成器上做一些类似下面代码的事情:

this.composeWith('jstack1:controller', {options: {name: 'some-name'}});

以及子生成器上的以下代码

this.option('name', {/* settings */});

但我不确定这是否是一个好方法,此外,我总是收到以下错误消息:

错误:未提供所需的参数[1mname[22m!为null。(C:''Users''Alexandre_''generator-jstack1''generator-generator-jstack1''node_modules''yeoman-generator''lib''base.js:359:33)在Array.forEach(本地)在Base.checkRequiredArgs(C:''Users''Alexandre_''generator-jstack1''generator-generator-jstack1''node_modules''yeoman-generator''lib''Base.js:355:19)at参数(C:''Users''Alexandre_''generator-jstack1''generator-generator-jstack1''node_modules''yeoman-generator''lib''base.js:321:8)位于module.exports.yeoman.generators.Base.extend.initializing(C:''Users''Alexandre_''generator-jstack1''generator-generator-jstack1''generators''controller''index.js:6:10)位于C:''Users''Alexandre''generator-jstack1''generator-generator-jstack1''node_modules''yeoman-generator''lib''base.js:421:16在processImmediate[as_immediateCallback](timers.js:383:17)

但我不确定这是否是一个好的方法来做这个

是的,这是正确的方法。生成器之间唯一的通信方式是通过选项和参数。(也可以通过缓存/配置和文件系统进行一些通信,但这些不是频繁的通道。)

关于这个错误,我猜你是在扩展generators.NamedBase而不是generators.Base

我已经找到了一种方法,而且非常简单。

首先在主生成器中,我在存储中添加上下文变量:

  var templateContext = {
    appname: this.appname,
    appdescription: this.appdescription,
    appversion: this.appversion,
    applicense: this.applicense,
    appautor: this.appautor,
    appemail: this.appemail
  };

  this.config.set('templateContext',templateContext);

然后在子生成器中,我得到templateContext with:

var templateContext = this.config.get('templateContext');