生产时禁用sls插件(每个阶段的插件不同?)

问题描述 投票:2回答:1

我有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 start时,它给了我一个错误Serverless command "offline" not found

我已经将无服务器离线包括为devDependencies(package.json) - 当插件包含在serverless.yml中的生产时它会给出错误Serverless command "offline" not found

如何解决这类问题(现在我必须在部署之前将其评论出来)?

amazon-web-services lambda serverless
1个回答
4
投票

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

在解析serverless.yml之前加载插件,因此您不能拥有包含或排除基于stage的插件的动态变量。

我最后编写了一个小脚本来从配置文件中删除plugins属性。我们的配置是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.')
});

package.json下的scripts中,我添加了这个:

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

在buildspec.yml中,然后将此行添加到pre_build命令中。

- npm run remove-serverless-offline
© www.soinside.com 2019 - 2024. All rights reserved.