簡體   English   中英

package.json中的多個任務的一個預處理

[英]One pretask for multiple tasks in package.json

我正在使用Terraform進行項目,我在package.json有兩個任務來啟動terraform planterraform apply

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

對於這兩個命令,我需要首先執行terraform get 我想為他們兩個做一個pretask

我試着用:

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

但它不起作用。

有沒有辦法NPMYarn來實現這個目的? 或者我是否被迫為這兩項任務編寫完全相同的預處理?

我通常會這樣:

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

這是另一個假裝"tf:*" prehook的選項。 只是為了模糊神秘的npm忍者,而不是推薦:

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

(使用npm run tf:plan或直接使用任何參數npm run tf -- whathever

您是否嘗試使用節點直接管理它?

您可以將package.json中的事件直接綁定到節點腳本,在節點腳本中,您可以通過以下方式執行terraform命令和公共代碼:

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

// common code

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

您也可以使用一個接受參數的單節點腳本來指定要執行的terraform任務,在腳本中定義公共代碼,然后根據參數執行正確的命令:

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

然后在節點內部,您可以通過以下方式訪問您的參數:

console.log(process.argv.param);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM