videos tristes realiza quirurgico provocados mes gancho embarazo con como clandestinos abortos aborto yeoman

tristes - ¿Cómo abortar con gracia el generador de yeoman en error?



videos de abortos provocados (1)

Estoy escribiendo un generador de yeoman y quiero verificar algunos requisitos previos, por ejemplo, un git está instalando. Puedo verificar esto fácilmente usando .exec , pero ¿cómo abortar con gracia el generador y reportar un error al usuario? Busqué en docs, pero parece que me falta alguna forma obvia de hacerlo. ¿Alguna pista?

Lanzar excepción, por supuesto, abortará el generador, pero ¿es una mejor manera? Tal vez algo más fácil de usar? No todos los usuarios de yeoman pueden leer las excepciones de js.


El estado actual del manejo de errores en los generadores populares es bastante diverso:

  • en la mayoría de los casos, simplemente registran el error y regresan de la acción y dejan que las acciones de subsequnt se ejecuten y devuelven el código de estado 0:

    Método setupTravis generator-karma :

    if (err) { this.log.error(''Could not open package.json for reading.'', err); done(); return;

    }

  • o establezca una propiedad de cancelación personalizada en caso de error y omita otras acciones con la verificación de la propiedad de cancelación, pero aún así devuelva el código de estado 0:

    generator-jhipster''s 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)); };

  • o terminar manualmente el proceso con process.exit :

    Método de configuring generator-mobile :

    if (err) { self.log.error(err); process.exit(1); }

Sin embargo, ninguno de estos métodos proporciona una buena manera de indicar al entorno que algo salió mal, excepto el último, pero que llama directamente a process.exit es un olor a diseño.

Lanzar una excepción también es una opción, pero esto también presenta el stackstrace para el usuario, lo que no siempre es una buena idea.

La mejor opción sería usar el método Environment.error , que tiene algunas ventajas interesantes:

  • El Environment se expone en la propiedad env de yeoman.generators.Base
  • se emite un evento de error que se maneja con el código yo cli
  • la ejecución dará como resultado un código de estado distinto de cero (error) que puede anularse
  • Por defecto, solo se mostrará el mensaje y no habrá seguimiento de pila.
  • el stacktrace se puede mostrar opcionalmente proporcionando la --debug incorporada --debug cuando se vuelve a ejecutar el generador.

Con el uso de esta técnica, tu método de acción se vería así:

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''); } });