我正在做一个子生成器,我想传递给主生成器上定义的这个子生成器变量: 有点像这样:
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:\用户\ Alexandre_ \发电机jstack1 \发电机 - 发电机 - jstack1 \ node_modules \自耕农发电机\ lib中\ base.js:359:33) at Array.forEach(native) 在Base.checkRequiredArgs(C:\ Users \ Alexandre_ \ generator-jstack1 \ generator-generator-jstack1 \ node_modules \ yeoman-generator \ lib \ base.js:355:19) at argument(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 at processImmediate [as _immediateCallback](timers.js:383:17)
答案 0 :(得分:1)
我找到了一种方法,这很简单。
首先在主生成器中,我在存储中添加上下文变量:
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:
var templateContext = this.config.get('templateContext');
答案 1 :(得分:0)
但我不确定这是否是一个好方法
是的,这是正确的方法。生成器相互通信的唯一方法是通过选项和参数。 (还可以通过缓存/配置和文件系统进行一些通信,但这些不是频繁的通道。)
关于错误,我猜你是在延长generators.NamedBase
而不是generators.Base
。