首页 > 解决方案 > 如何访问 serverless.ts 中无服务器 cli 传递的选项值?

问题描述

当我使用 serverless.ts 进行设置的无服务器框架时,我遇到了一个问题。

我可以像这样在无服务器 cli 上传递值

serverless offline --stage prod

在 serverless.yml 中,我们可以通过${self:provider.stage} 但我无法在 serverless.ts 上访问它。当然,我知道它可以替换为常量变量,并且不要在 cli 上传递值。但我说我永远无法访问 serverless.ts 上传递的值。有什么办法???

标签: typescriptyamlserverless

解决方案


TL;DR:我的解决方法是使用导出的函数serverless/lib/utils/resolveCliInput

我不确定我是否理解正确,但如果您的问题是如何从内部访问传递给无服务器 CLI 的值,serverless.(ts|js)那么我有一个解决方法。

我遇到了这个问题,谷歌搜索了一段时间后找不到任何解决方案,所以我开始挖掘serverless源代码。我注意到这个文件serverless/lib/utils/resolveCliInput导出了一个解析输入参数的函数。

老实说,我不知道我们是否可以在框架的未来版本中依赖这个函数(我已经用 2.8.0 版本进行了测试),但这里有一个工作代码示例:

import resolveCliInput from 'serverless/lib/utils/resolveCliInput';
const { commands, options } = resolveCliInput(process.argv.slice(2));
const stage = options.s ?? options.stage ?? 'dev';

当然我们可以使用一些库来解析process.argv,比如commander,甚至可以解析我们代码中的args。


推荐阅读