Javascript 在子生成器中只调用构造函数的Yeoman composeWith
我试图使用Javascript 在子生成器中只调用构造函数的Yeoman composeWith,javascript,yeoman,yeoman-generator,Javascript,Yeoman,Yeoman Generator,我试图使用composeWith,调用同一个生成器包中的子生成器。然而由于某种原因,只调用被调用生成器的构造函数 我的发电机包发电机测试如下所示: package.json generators -- app -- index.js -- base -- index.js 'use strict'; var yeoman = require('yeoman-generator'); var yosay = require('yosay'); module.exports = yeo
composeWith
,调用同一个生成器包中的子生成器。然而由于某种原因,只调用被调用生成器的构造函数
我的发电机包发电机测试
如下所示:
package.json
generators
-- app
-- index.js
-- base
-- index.js
'use strict';
var yeoman = require('yeoman-generator');
var yosay = require('yosay');
module.exports = yeoman.generators.Base.extend({
constructor: function () {
console.log('constructing app');
yeoman.generators.Base.apply(this, arguments);
},
initializing: function() {
console.log('initializing app');
var done = this.async();
this.composeWith('test:base',{ options: { } })
.on('end', function() {
done();
});
}
});
我在应用程序中的主生成器如下所示:
package.json
generators
-- app
-- index.js
-- base
-- index.js
'use strict';
var yeoman = require('yeoman-generator');
var yosay = require('yosay');
module.exports = yeoman.generators.Base.extend({
constructor: function () {
console.log('constructing app');
yeoman.generators.Base.apply(this, arguments);
},
initializing: function() {
console.log('initializing app');
var done = this.async();
this.composeWith('test:base',{ options: { } })
.on('end', function() {
done();
});
}
});
我的子生成器位于base
:
'use strict';
var yeoman = require('yeoman-generator');
module.exports = yeoman.generators.Base.extend({
constructor: function () {
console.log('constructed base');
yeoman.generators.Base.apply(this, arguments);
},
initializing: function() {
console.log('initialized base');
}
});
这将生成4个控制台输出,但我只得到前三个:
constructing app
initializing app
constructed base
initialized base
从不显示。为什么?我是否误解了composeWith
的概念
或者有其他方法可以解决这个问题吗?这不起作用,因为您不能等待合成生成器的结束
调用this.async()
将暂停运行循环,直到调用回调为止。在这种情况下,永远不会调用它,因为在调用回调之前,子生成器不会开始运行(但是回调会等待子生成器运行)。基本上,您已经死死地锁定了节点进程
约曼语的构成必须是独立的。发电机保持解耦非常重要。为了加强这一点,yeoman generator
不提供除运行循环优先级之外的合成流控制
你需要重新思考你的代码,并将这些生成器解耦。这不起作用,因为你不能等待合成生成器的结束
调用this.async()
将暂停运行循环,直到调用回调为止。在这种情况下,永远不会调用它,因为在调用回调之前,子生成器不会开始运行(但是回调会等待子生成器运行)。基本上,您已经死死地锁定了节点进程
约曼语的构成必须是独立的。发电机保持解耦非常重要。为了加强这一点,yeoman generator
不提供除运行循环优先级之外的合成流控制
您需要重新思考代码并将这些生成器解耦。谢谢您的回答。这是否意味着首先调用主生成器的初始化方法,然后调用子生成器,然后才继续主生成器?或者如果我想要这种功能,从子生成器而不是基类进行扩展会更好吗?主生成器方法总是在它们自己的优先级循环中首先运行。所以所有的方法都先运行,然后才启动子生成器?如果是,我怎么能在主生成器之前运行多个生成器的公共任务?你不能,你不应该关心运行的顺序。如果你关心顺序,那么你就不需要作文了。谢谢你的回答。这是否意味着首先调用主生成器的初始化方法,然后调用子生成器,然后才继续主生成器?或者如果我想要这种功能,从子生成器而不是基类进行扩展会更好吗?主生成器方法总是在它们自己的优先级循环中首先运行。所以所有的方法都先运行,然后才启动子生成器?如果是,我怎么能在主生成器之前运行多个生成器的公共任务?你不能,你不应该关心运行的顺序。如果你关心顺序,那么你就不需要构图。