在子生成器中只调用构造函数
Yeoman composeWith only calling constructor in subgenerator
我试图使用composeWith
,调用同一生成器包中的子生成器。然而,由于某种原因,只调用了被调用生成器的构造函数。
我的生成器包generator-test
看起来像这样:
package.json
generators
-- app
-- index.js
-- base
-- index.js
我的主生成器在app
看起来像这样:
'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
不提供除了运行循环优先级之外的组合流控制。
你需要重新考虑你的代码并解耦那些生成器。
相关文章:
- 使用Google Visualization动态调用构造函数
- 拦截对构造函数的调用
- 在javascript中对数字调用构造函数
- 我应该在原型上还是在新创建的实例上调用构造函数方法
- 在javascript中调用构造函数中函数的对象
- 从“”调用构造函数;摘要“;基本“;类”;
- jshint 和 Function() gets:调用构造函数时缺少“new”前缀
- 缺少调用构造函数的“()”
- JS中的自调用构造函数
- 如何在javascript中从另一个类调用构造函数
- 如何在不调用构造函数的情况下复制对象及其原型链?
- 在javascript中未调用构造函数时绑定此函数
- 如果构造函数在另一个函数中,则新创建的对象调用构造函数undefined
- Javascript调用构造函数中的构造函数
- 为什么我不能在我的模块中调用构造函数方法?
- 覆盖Ext.data.存储,调用构造函数
- 扩展 jQuery 在每个方法调用上调用构造函数
- 如何通过方法传递类实例而不调用构造函数
- 在子生成器中只调用构造函数
- Javascript语法[..]]在函数调用/构造函数调用前