package.json 中多项任务的一项前置任务
One pretask for multiple tasks in package.json
我正在为一个项目使用 Terraform,我在 package.json
中有两个任务来启动 terraform plan
和 terraform 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"
}
但是没用。
有什么方法可以使用 NPM
或 Yarn
only 来实现吗?或者我是否被迫为这两项任务编写完全相同的前置任务?
你试过直接用node管理吗?
您可以将 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);
我通常是这样走的:
"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
)
我正在为一个项目使用 Terraform,我在 package.json
中有两个任务来启动 terraform plan
和 terraform 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"
}
但是没用。
有什么方法可以使用 NPM
或 Yarn
only 来实现吗?或者我是否被迫为这两项任务编写完全相同的前置任务?
你试过直接用node管理吗?
您可以将 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);
我通常是这样走的:
"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
)