如何在Yeoman中完成复制操作

时间:2014-07-03 10:01:47

标签: javascript node.js yeoman

我正在写一个Yeoman生成器,我想复制一个目录。你可以在下面找到代码。它正常工作,但是,在复制完成后,我想执行像'npm install'这样的进一步操作。 由于复制是异步完成的,因此在复制所有文件之前执行'npm install'。我怎么能等到所有复制操作都完成?

this.expandFiles('**', {
    cwd: this.sourceRoot(),
    dot: true
}).forEach(function (el) {

    this.copy(el, el);

}, this);

3 个答案:

答案 0 :(得分:2)

使用this.copy调用链.on并在'end'事件上运行您的函数。

this.copy(el, el)
  .on('end', function() {
     console.log("Copy is complete");
   });

答案 1 :(得分:-1)

一种简单的方法是使用一个模块来控制循环流,例如异步,这样你就可以知道它何时完成。这是代码:

var me = this;
var async = require('async');

var array = this.expandFiles('**', {
    cwd: this.sourceRoot(),
    dot: true
});

async.each(array, function(el, callback) {
    me.copy(...);  // assuming that this copy() is synchronous
    callback(null);
}, function(err) {
    console.log("done with copying....");
});

答案 2 :(得分:-1)

你可以使用Yeoman的this.async()

首先,获得恢复生成器所需的功能:

var done = this.async();

完成复制后(可能在某些回调中),当您想要恢复生成器时,请致电done()

文档:https://yeoman.github.io/generator/RunContext.html