如何在Serverless hook中触发可访问stage和region变量的脚本
传入stage和region变量到自定义脚本的方法
你可以通过两种常用方式实现变量传递,三种插件的配置逻辑通用,以下以你在用的serverless-scriptable-plugin为例:
方法1:通过环境变量传递(更推荐)
直接在执行命令前注入环境变量,利用Serverless内置的变量占位符自动替换对应值,配置如下:
custom: scriptable: hooks: before:deploy:deploy: STAGE=${sls:stage} REGION=${aws:region} node createEnvFileInteractive.js
如果需要兼容Windows系统,可以先安装cross-env依赖,调整命令为:
before:deploy:deploy: cross-env STAGE=${sls:stage} REGION=${aws:region} node createEnvFileInteractive.js
脚本中直接读取环境变量即可:
// createEnvFileInteractive.js 中取值示例 const stage = process.env.STAGE const region = process.env.REGION
方法2:通过命令行参数传递
将变量作为脚本的启动参数传入,配置如下:
custom: scriptable: hooks: before:deploy:deploy: node createEnvFileInteractive.js --stage=${sls:stage} --region=${aws:region}
脚本中解析参数即可,原生Node.js解析示例:
// createEnvFileInteractive.js 中取值示例 const args = new Map(process.argv.slice(2).map(arg => arg.split('='))) const stage = args.get('--stage') const region = args.get('--region')
如果有复杂参数解析需求,也可以引入yargs、minimist等第三方工具库。
注意:两种方式中
${sls:stage}和${aws:region}都会自动匹配你执行Serverless命令时传入的--stage、--region参数值,无需手动硬编码。
如果使用另外两种插件,只需要调整对应插件的配置结构,命令部分的变量传递规则完全一致。
内容的提问来源于stack exchange,提问作者user1283776
相关产品推荐
相关产品推荐

