我正在编写一个自动生成器并希望检查一些先决条件,例如git正在安装.我可以轻松地检查这个.exec,但我如何优雅地中止生成器并向用户报告错误?我搜索了文档,但似乎我错过了一些明显的方法来做到这一点.任何提示?
抛出异常当然会中止生成器,但这是最好的方法吗?也许更方便用户的东西?并非所有yeoman用户都能读取js异常.
nem*_*esv 42
在大多数情况下,他们只记录错误并从操作返回并让子操作运行并返回0状态代码:
generator-karma的setupTravis方法:
if (err) {
this.log.error('Could not open package.json for reading.', err);
done();
return;
Run Code Online (Sandbox Code Playgroud)
}
或者abort在出错时设置自定义属性并跳过对该abort属性进行cheking的进一步操作,但仍返回0状态代码:
generator-jhipster的 CloudFoundryGenerator:
CloudFoundryGenerator.prototype.checkInstallation = function checkInstallation() {
if(this.abort) return;
var done = this.async();
exec('cf --version', function (err) {
if (err) {
this.log.error('cloudfoundry\'s cf command line interface is not available. ' +
'You can install it via https://github.com/cloudfoundry/cli/releases');
this.abort = true;
}
done();
}.bind(this));
};
Run Code Online (Sandbox Code Playgroud)或者手动结束流程process.exit:
发电机的移动的configuring方法:
if (err) {
self.log.error(err);
process.exit(1);
}
Run Code Online (Sandbox Code Playgroud)然而,这些方法都没有提供向环境发出信号的好方法,除了最后一个出现问题,但直接调用process.exit是一种设计气味.
抛出异常也是一种选择,但这也为用户提供了stackstrace,这并不总是一个好主意.
Environment暴露的彻底env的财产yeoman.generators.Baseerror发出一个由yo cli代码处理的事件--debug在重新运行生成器时提供内置选项.使用此技术,您的操作方法将如下所示:
module.exports = generators.Base.extend({
method1: function () {
console.log('method 1 just ran');
this.env.error("something bad is happened");
console.log('this won't be executed');
},
method2: function () {
console.log('this won't be executed');
}
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3230 次 |
| 最近记录: |