Javascript yeoman子生成器如何访问主生成器上定义的变量?
我正在做一个子生成器,我想将主生成器上定义的变量传递给这个子生成器: 诸如此类的事情:Javascript yeoman子生成器如何访问主生成器上定义的变量?,javascript,yeoman,yeoman-generator,Javascript,Yeoman,Yeoman Generator,我正在做一个子生成器,我想将主生成器上定义的变量传递给这个子生成器: 诸如此类的事情: writing: function() { console.log(this.appversion); var email = this.email; // Variable defined on the main controller. this.fs.copy( this.templatePath('somefile.js'), this.destina
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!
空。(C:\Users\Alexandre\generator-jstack1\generator-generator-jstack1\node\u modules\yeoman generator\lib\base.js:359:33)
at Array.forEach(本机)
在Base.checkRequiredArgs(C:\Users\Alexandre\generator-jstack1\generator-generator-jstack1\node\u modules\yeoman generator\lib\Base.js:355:19)
at参数(C:\Users\Alexandre\generator-jstack1\generator-generator-jstack1\node\u modules\yeoman generator\lib\base.js:321:8)
在module.exports.yeoman.generators.Base.extend.initialization(C:\Users\Alexandre\generator-jstack1\generator-generator-jstack1\generators\controller\index.js:6:10)
在C:\Users\Alexandre\generator-jstack1\generator-generator-jstack1\node\u modules\yeoman generator\lib\base.js:421:16
在processImmediate[as_immediateCallback](timers.js:383:17)
但我不确定这是否是一个好办法
是的,这是正确的方法。生成器之间通信的唯一方式是通过选项和参数(也可以通过缓存/配置和文件系统进行通信,但这些不是常见的通道)
关于这个错误,我猜您是在扩展
生成器.NamedBase
而不是生成器.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:
var templateContext = this.config.get('templateContext');