javascript - Yeoman-Generator programmgesteuert mit Argumenten aufrufen
Ich habe einen Yeoman-Generator mit Untergenerator. Ich muss den Untergenerator über Code aufrufen und ich verwende den unten stehenden Code, der funktioniert. Ich sehe, dass der Untergenerator aufgerufen wird und ich habe die Frage im Terminal bekommen.
docs: https://yeoman.io/authoring/integrating-yeoman.html
var yeoman = require('yeoman-environment');
var env = yeoman.createEnv();
env.lookup(function () {
env.run('main:sub',err => {
console.log('done' ,err);
});
});
Der Untergenerator hat nur eine Frage
prompting() {
const prompts = [
{
name: "app",
message: "which app to generate?",
type: "input",
default: this.props.app,
},
];
...
Ich möchte es still aufrufen, was bedeutet, dass ich den Wert für app Frage über Code und nicht über das Terminal übergebe, und ich versuche dies, was nicht funktioniert (ich sehe die Frage im Terminal)
env.lookup(function () {
env.run('main:sub',{"app":"nodejs"}, err => {
console.log('done' ,err);
});
});
und habe auch das versucht, was nicht funktioniert
env.lookup(function () {
env.run('main:sub --app nodejs', err => {
console.log('done' ,err);
});
});
Wie kann ich das machen? Die Werte mithilfe von Code übergeben (vielleicht so, wie es in einem Unittest gemacht wird, aber dieser Code ist kein Unittest... wenn das Terminal nicht aufgerufen wird). Aus der Dokumentation bin ich mir nicht sicher, wie man die Werte übergibt https://yeoman.io/authoring/integrating-yeoman.html
Ich habe das auch gefunden, aber nicht ganz verstanden, wie man es benutzt, um Parameter an den Generator zu übergeben http://yeoman.github.io/environment/Environment.html#.lookupGenerator ist das möglich?
Antwort #1
Du kannst einfach Folgendes tun:
env.lookup(function () {
env.run('main:sub',{"app":"nodejs"}, err => {
console.log('done' ,err);
});
});
und innerhalb des sub Sub-Generators können Sie den Wert über this.options.app finden.
Um die Frageaufforderung zu deaktivieren, definieren Sie das when-Feld innerhalb des Frageobjekts wie folgt:
prompting() {
const prompts = [
{
name: "app",
message: "which app to generate?",
type: "input",
default: this.props.app,
when: !this.options.app
},
];
. . .
return this.prompt(prompts).then((props) => {
this.props = props;
this.props.app = this.options.app || this.props.app;
});
}
