amazon-web-services - 在生产中禁用 sls 插件(每个阶段有不同的插件?)

标签 amazon-web-services lambda serverless

我的 serverless-offline 插件遇到问题。我希望它只能在本地开发(开发阶段)时访问,而不能在任何其他阶段访问

我的serverless.yml看起来像这样:

service: foo
provider:
  # ...
  stage: dev

plugins:
  - serverless-offline

custom:
  stage: "${opt:stage, self:provider.stage}"
  # ...

它工作正常(在我的本地机器上)

我试过this solution (将插件作为自定义变量传递),但它不起作用

service: foo
provider:
  # ...
  stage: dev

custom:
  stage: "${opt:stage, self:provider.stage}"
  plugins:
    dev:
      - serverless-offline
  # ...

plugins: ${self:custom.plugins.${self:custom.stage}}

运行sls离线启动时,它给我一个错误未找到无服务器命令“offline”


我已将 serverless-offline 包含为 devDependency (package.json) - 在生产中,当插件包含在 serverless.yml 中时,它会给出错误未找到 Serverless 命令“offline”

如何解决这种问题(现在我必须在部署之前将其注释掉)?

最佳答案

https://forum.serverless.com/t/separate-plugins-for-different-environments/2043/7声明你不能让插件动态工作。

Plugins are loaded before the serverless.yml is parsed, so you can't have dynamic variables that include or exclude plugins based on stage.

我最终编写了一个小脚本来从配置文件中删除插件属性。我们的配置是 JSON,而不是 YAML,但您可以使用 yamljs 包来解析和编写 YAML 文件。这样您就可以在版本控制系统中保持配置文件完整,并且仅在构建时对其进行修改。

这并不优雅,因为它删除了所有插件而不是特定的插件,但它可以工作。如果您只需要删除特定插件,也很容易适应。

我已将此代码放入名为 remove-serverless-offline.js 的文件中。

const jsonfile = require('jsonfile');
const file = './serverless.json';
jsonfile.readFile(file, function(err, obj){

  if(!obj.hasOwnProperty('plugins')){

    console.log('serverless.json: could not find serverless-offline in plugin list.');
    return;
  }

  delete obj.plugins;

  jsonfile.writeFile(file, obj, {spaces: 4}, function(err){

    console.error(err);
  });

  console.log('serverless.json: removed serverless-offline from plugin list.')
});

scripts 下的 package.json 中,我添加了以下内容:

"remove-serverless-offline": "node remove-serverless-offline.js",

在 buildspec.yml 中,只需将此行添加到 pre_build 命令中即可。

- npm run remove-serverless-offline

关于amazon-web-services - 在生产中禁用 sls 插件(每个阶段有不同的插件?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48460763/

相关文章:

ios - 使用 S3TransferManager AWS iOS SDK 上传大文件

amazon-web-services - 我可以对 aws lambda 的已发布版本进行更改吗?

c# - 动态合并 2 个类

amazon-dynamodb - dynamodb 如何在 serverless.yml 中定义无键模式?

c# - 唤醒 Azure 函数

python - 将 confluent-kafka python 库与 AWS lambda 一起使用时出错

amazon-web-services - AWS S3 Select - 从 2 个不同级别的 json 检索数据

java - 如何使用 Java8 Lambda 表达式将 Set<String> 转换为 Long[] 数组

java - 谓词与 if 语句

Azure Function 时间规范