gru*_*dus 2 lambda amazon-web-services serverless
我的插件有问题serverless-offline。我希望它只能在本地开发(开发阶段)时访问,而不能在任何其他阶段访问
我的serverless.yml看起来像这样:
service: foo
provider:
# ...
stage: dev
plugins:
- serverless-offline
custom:
stage: "${opt:stage, self:provider.stage}"
# ...
Run Code Online (Sandbox Code Playgroud)
它工作正常(在我的本地计算机上)
我尝试过这个解决方案(将插件作为自定义变量传递),但它不起作用
service: foo
provider:
# ...
stage: dev
custom:
stage: "${opt:stage, self:provider.stage}"
plugins:
dev:
- serverless-offline
# ...
plugins: ${self:custom.plugins.${self:custom.stage}}
Run Code Online (Sandbox Code Playgroud)
运行时sls offline start它给我一个错误Serverless command "offline" not found
我已将 serverless-offline 包含为devDependencies(package.json) - 在生产中,当插件包含在 serverless.yml 中时,它会给出错误Serverless command "offline" not found
如何解决这种问题(现在我必须在部署之前将其注释掉)?
小智 5
https://forum.serverless.com/t/separate-plugins-for- different-environments/2043/7 指出您无法使插件动态工作。
插件在解析 serverless.yml 之前加载,因此您不能使用基于阶段包含或排除插件的动态变量。
我最终编写了一个小脚本来从配置文件中删除插件属性。我们的配置是 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.')
});
Run Code Online (Sandbox Code Playgroud)
在我的package.json下面scripts,我添加了以下内容:
"remove-serverless-offline": "node remove-serverless-offline.js",
Run Code Online (Sandbox Code Playgroud)
在 buildspec.yml 中,只需将此行添加到命令中即可pre_build。
- npm run remove-serverless-offline
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1888 次 |
| 最近记录: |