Yaml 无服务器YML toUpperCase
我想在不同的环境(开发、测试、产品)中重用我的Yaml 无服务器YML toUpperCase,yaml,serverless,Yaml,Serverless,我想在不同的环境(开发、测试、产品)中重用我的serverless.yml 在配置中,我有: provider: name: aws stage: ${opt:stage, 'dev'} environment: NODE_ENV: ${self:provider.stage} 现在,该值将是dev、test或prod(全部小写) 有没有一种方法可以将其转换为UpperCase(),使输入和self:provider:stage保持原样(即小写),但NODE_ENV的值是大
serverless.yml
在配置中,我有:
provider:
name: aws
stage: ${opt:stage, 'dev'}
environment:
NODE_ENV: ${self:provider.stage}
现在,该值将是dev
、test
或prod
(全部小写)
有没有一种方法可以将其转换为UpperCase(),使输入和
self:provider:stage
保持原样(即小写),但NODE_ENV的值是大写的?好吧,YAML中没有这样的函数
不过,您可以通过使用小写和大写名称之间的映射来实现所需的功能
custom:
environments:
dev: DEV
test: TEST
prod: PROD
provider:
name: aws
stage: ${opt:stage, 'dev'}
environment:
NODE_ENV: ${self:custom.environments.${self:provider.stage}}
您可以使用提供的功能来实现这种效果 以您的示例为例,这应该是可行的(假设您在支持现代语法的node.js环境中运行) serverless.yml
...
provider:
name: aws
stage: ${opt:stage, 'dev'}
environment:
NODE_ENV: ${file(./yml-helpers.js):provider.stage.uppercase}
...
yml helpers.js(与serverless.yml相邻)
module.exports.provider=serverless=>{
//'serverless'参数包含.yml文件中的所有信息
const provider=serverless.service.provider;
返回Object.entries(提供程序).reduce(
(累加器,[键,值]=>({
…蓄电池,
[钥匙]:
值的类型==='string'
? {
小写:value.toLowerCase(),
大写:value.toUpperCase()
}
:价值
}),
{}
)
};
通过阅读一些源代码和控制台记录整个serverless
对象,我找到了一些可行的方法。本例将一个帮助函数应用于一些输入选项值(根据需要,改为应用str.toUpperCase()
)。解析serverless对象中已有的输入选项会产生一个结果
//serverless-helpers.js
函数toTitleCase(word){
console.log(“输入字:“+word”);
let lower=word.toLowerCase();
让title=lower.replace(lower[0],lower[0].toUpperCase());
控制台日志(“输出字:”+标题);
返回标题;
}
module.exports.dynamic=函数(无服务器){
//`serverless`参数包含中的所有信息
//serverless.yaml文件
//consoleLog('同时使用无服务器配置和方法!');
//这对于发现可用内容非常有用:
//serverless.cli.consoleLog(serverless);
const input_options=serverless.processedInput.options;
返回{
第1部分标题:toTitleCase(输入选项第1部分),
第2部分标题:toTitleCase(输入选项第2部分)
};
};
#serverless.yaml代码段
自定义:
第1部分:${opt:part1}
第2部分:${opt:part2}
dynamicOpts:${file(./serverless helpers.js):dynamic}
组合:前缀${self:custom.dynamicOpts.part1Title}${self:custom.dynamicOpts.part2Title}后缀
这个简单的例子假设输入选项是
--part1={value}
和--part2={value}
,但一般的做法是遍历serverless.processedInput.options
的属性,并对这些值应用任何自定义帮助程序。我认为这是一种潜在的解决方法,并使用了类似的技术。我想知道有没有更好或合适的方法。无论如何,如果没有什么,我可以用地图。谢谢尽管指定了--stage=foo,但它始终返回DEV。我正在使用serverless@1.71.0