Skip to content

Extending and overriding configuration

Plugins can extend and override the internal configuration.

To do so, plugins may use the serverless.extendConfiguration(...) method. This is only allowed at pre-init stage of serverless. The method also takes care of resolving all variables in the given value. But it does not validate you input nor the target. Improper usage can cause serverless to fail.

The serverless.extendConfiguration(configurationPathKeys, value) method takes two arguments.

ArgumentTypeDescription
configurationPathKeysstring[]Path of the configuration property to set; must not be empty
valuestring | object | arrayNew value of the configuration property in configurationPathKeys

If configuration in configurationPathKeys does exist the value will be overwritten.
If configuration in configurationPathKeys does not exist the whole path will be created.

You can use it in plugin constructor, or if for some reason configuration extension is resolved asynchronously you may resort to asyncInit() method

class MyPlugin {
constructor(serverless) {
this.serverless = serverless;
const value = {
myKey: 'myValue',
};
this.serverless.extendConfiguration(['custom', 'myPlugin'], value);
}
}
module.exports = MyPlugin;

If your plugin needs merging you need to take care of it yourself.

class MyPlugin {
constructor(serverless) {
this.serverless = serverless;
const currentConfig = this.serverless.configurationInput.custom.myPlugin;
const value = Object.assign(currentConfig, {
myKey: 'myValue',
});
this.serverless.extendConfiguration(['custom', 'myPlugin'], value);
}
}
module.exports = MyPlugin;