Почему функция _directory вызывается четыре раза в подклассе yeoman.generators.Base?
Вот как я расширяю йоменский генератор Base
учебный класс
module.exports = yeoman.generators.Base.extend({
prompting: function () {
var done = this.async();
// Have Yeoman greet the user.
this.log(yosay(
'Welcome to the cool ' + chalk.red('generator-zeetings') + ' generator!'
));
var prompts = [{
...
}];
this.prompt(prompts, function (props) {
this.props = props;
// ...
done();
}.bind(this));
},
_directory: function (source, destination) {
// Simplified for this question
var src = path.join(source, 'index.html');
var dest = path.join(destination, 'final.html');
console.log('Copy from ' + src + ' to ' + dest);
this.fs.copyTpl(
this.templatePath(src),
this.destinationPath(dest),
this.props
);
},
prepareApp: function () {
this._directory(this.templatePath(), this.destinationRoot('app'));
},
prepareData: function () {
this._directory(this.templatePath(), this.destinationRoot('data'));
},
writing: function () {
this.prepareApp();
this.prepareData();
},
});
Я считаю, что по какой-то причине вспомогательная функция _directory
называется 4 раза.
Я ожидал, что функция вызывается только дважды, один для app
а другой для папки data
, посредством writing
функция.
Оказывается, если я готовлюсь _
в appendApp
а также appendData
, генератор будет вести себя как я ожидал.
Что я хочу понять:
1) Кажется, я не нахожу это поведение задокументированным на веб-сайте Йомана. Ожидается ли такое поведение ("вызов каждого открытого метода в подклассе")?
2) Если это ожидаемое поведение, как я могу контролировать порядок вызова этих открытых методов?
1 ответ
Обратитесь к документации: http://yeoman.io/authoring/running-context.html
Каждая функция в Йомен-генератор является задачей. Все задачи выполняются автоматически и упорядочиваются в соответствии с их приоритетами (приоритет определяется именем функции / объекта).
Имена функций, начинающиеся с подчеркивания, считаются закрытыми и не будут выполняться.