我对serverless-offline插件有个问题。我希望它只在本地开发(开发阶段)时才能访问,而不是在任何其他阶段。
我的serverless.yml看起来是这样的:
service: foo
provider:
# ...
stage: dev
plugins:
- serverless-offline
custom:
stage: "${opt:stage, self:provider.stage}"
# ...而且工作正常(在我的本地机器上)
我尝试过这个解决方案 (将插件作为自定义变量传递),但它不起作用
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。
如何解决这类问题(现在我必须在部署之前将其注释掉)?
发布于 2018-03-02 11:41:23
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-offlinehttps://stackoverflow.com/questions/48460763
复制相似问题