package.json中的多个任务的一个预处理

时间:2017-04-28 11:51:53

标签: javascript json npm package.json yarnpkg

我正在为项目使用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 实现这一目标?或者我是否被迫为这两项任务编写完全相同的预处理?

1 个答案:

答案 0 :(得分:4)

您是否尝试使用节点直接管理它?

您可以将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);