gpt4 book ai didi

javascript - 在 Yeoman 生成器完成后同步执行命令行操作

转载 作者:行者123 更新时间:2023-11-29 21:59:36 25 4
gpt4 key购买 nike

我正在构建一个 Yeoman 生成器,在它完成后我想执行一些命令行操作,例如“npm install”、“bower install”和“grunt less”。为此,我使用 spawnCommand 并使用事件监听器嵌套所有操作以同步执行它们。但是,为了避免这种无休止的嵌套,我正在寻找一个更简洁的实现,以使其易于扩展。完美的是,我希望有一个包含命令的数组(例如 ['npm install'、'grunt install'、'less:dev']),并通过适当的错误检测对其进行同步处理。

// Install npm packages
this.spawnCommand('npm', ['install'])
.on('exit', function (err) {
if (err) {
this.log.error('npm package installation failed. Please run \'npm install\' and \'bower install\'. Error: ' + err);
} else {
// Install bower packages
this.spawnCommand('bower', ['install'])
.on('exit', function (err) {
if (err) {
this.log.error('bower package installation failed. Please run \'bower install\'. Error: ' + err);
} else {
this.spawnCommand('grunt', ['less'])
.on('exit', function (err) {
if (err) {
this.log.error('Less compilation failed. Please run \'grunt less:dev\'. Error: ' + err);
} else {

}

}.bind(this));
}

}.bind(this));
}

}.bind(this));

最佳答案

是这样的吗? (虽然未经测试):

this.processTask = function (task) {
this.spawnCommand(task.cmd, task.args)
.on('exit', function (err) {
if (err) {
this.log.error('task failed. Error: ' + err);
} else {
this.emit('nextTask');
}
});
};

this.on('nextTask' function(){
var next = this.tasks.shift();
if (next){
this.processTask(next);
} else {
console.log('we are done');
}
}.bind(this));

//preparing the list of tasks:
this.tasks = [];
this.tasks.push({cmd: 'npm', args:['install']});
this.tasks.push({cmd: 'bower', args:['install']});
this.tasks.push({cmd: 'grunt', args:['less']});

//start first task

this.processTask(this.tasks.shift());

关于javascript - 在 Yeoman 生成器完成后同步执行命令行操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24550828/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com