Frage Eine Voransicht für mehrere Aufgaben in package.json


Ich benutze Terraform für ein Projekt und ich habe zwei Aufgaben in meinem package.json starten terraform plan und terraform apply.

"scripts": {
    "tf:apply": "terraform apply",
    "tf:plan": "terraform plan"
}

Für beide Befehle muss ich a ausführen terraform get zuerst. Ich möchte nur einen haben pretask Für beide.

Ich habe versucht zu verwenden:

"scripts": {
    "pretf:*": "terraform get",
    "tf:apply": "terraform apply",
    "tf:plan": "terraform plan"
}

Aber es funktioniert nicht.

Gibt es einen Weg dies zu erreichen? NPM oder Yarn  nur ? Oder bin ich gezwungen, für beide Aufgaben die exakt gleiche Vorbesprechung zu schreiben?


20
2018-04-28 11:51


Ursprung


Antworten:


Ich gehe normalerweise so:

"scripts": {
    "tf:get": "terraform get",
    "tf:apply": "npm run tf:get && terraform apply",
    "tf:plan": "npm run tf:get && terraform plan"
}

Dies ist eine weitere Option, die eine Art von Fälschungen vortäuscht "tf:*" vorhaken. Nur für obskure kryptische npm Ninjas und nicht empfohlen:

"scripts": {
    "pretf": "terraform get",
    "tf": "terraform",
    "tf:apply": "npm run tf -- apply",
    "tf:plan": "npm run tf -- plan"
}

(Verwenden Sie es mit npm run tf:plan oder direkt mit irgendeinem Argument npm run tf -- whathever)


6
2018-05-06 12:26



Haben Sie versucht, es direkt mit Knoten zu verwalten?

Sie können die Ereignisse innerhalb Ihrer package.json direkt an Knotenskripte binden und innerhalb der Knotenskripte können Sie Ihre terraform-Befehle und Ihren gemeinsamen Code auf diese Weise ausführen:

var exec = require('child_process').exec;
var cmd = 'terraform apply';

// common code

exec(cmd, function(error, stdout, stderr) {
  // command output is in stdout
});

Sie können auch ein einzelnes Knotenscript verwenden, das einen Parameter akzeptiert, um festzulegen, welche Terraform-Aufgabe ausgeführt werden soll, Ihren gemeinsamen Code im Skript definieren und dann den richtigen Befehl abhängig vom Parameter ausführen:

"scripts": {
    "tf:apply": "node myscript.js --param=apply",
    "tf:plan": "node myscript.js --param=plan"
}

Dann innerhalb des Knotens können Sie auf folgende Weise auf Ihren Parameter zugreifen:

console.log(process.argv.param);

4
2018-05-04 22:30