Featurama
Removing the chaos from your features.
Featurama gives you feature flags for enabling front-end features at build-time and run-time, while using the same configuration.
Installation
npm install featurama
Usage
To use build-time featurama:
var featurama = require('featurama')({
featurePath: '/features',
root: '/src'
});
To use run-time featurama:
- Include
featurama-client.js
into your client-side javascript build. - Set up a build-task that adds the run-time configuration file to your client-side javscript assests (See:
featurama.buildRunTimeConfigFile()
in the API section below).
Configuration Setup
In /features
(or whatever you specified as the featurePath
):
module.exports = {
featureName: 'Feature 1',
buildTimeEnabled: false,
runTimeEnabled: function() { return !!Modernizr.history; },
jsFiles: [
'feature1.js',
],
vendorFiles: [],
scssFiles: [
'_feature1.scss',
],
};
API
Run-time Methods
featurama.enabled(featureName)
Given a feature name, this indicates if it is enabled or not.
Parameter | Type | Description |
---|---|---|
featureName |
string |
the name of the feature |
Returns: | boolean |
true if enabled |
featurama.on(featureName)
Given a feature name, this enables that feature.
Parameter | Type | Description |
---|---|---|
featureName |
string |
the name of the feature |
featurama.off(featureName)
Given a feature name, this disables that feature.
Parameter | Type | Description |
---|---|---|
featureName |
string |
the name of the feature |
Build-time Methods
featurama.isBuildTimeEnabled(buildTimeEnabled)
Return the boolean value or executes the function that defines if this feature is enabled or not.
Parameter | Type | Description |
---|---|---|
buildTimeEnabled |
boolean | function |
data from the config file that indicates enabled status |
Returns: | boolean |
true if enabled |
featurama.buildFeatureExclusions
Build a list of files to exclude
Type | Description | |
---|---|---|
Returns: | object |
object of arrays containing files to exclude |
featurama.buildFeatureInclusions()
Build a list of files to include
Type | Description | |
---|---|---|
Returns: | object |
object of arrays containing files to include |
featurama.featureValuesList()
Get a list of all of the declared features, their states, and file lists
Type | Description | |
---|---|---|
Returns: | object |
combined feature configs |
featurama.featureList()
Build a key:value list of features and their enabled states
Type | Description | |
---|---|---|
Returns: | object |
key: value pairs |
featurama.buildRunTimeConfigFile(outputFolder, outputType)
Generates a config file (named runTimeFlags.js
) to be included in your client-side code. This file bridges the gap between your featurama configuration and your run-time feature flags.
Parameter | Type | Description |
---|---|---|
outputFolder |
string |
path to the folder where you want to generate runTimeFlags.js ; example: path/to/my/scripts . |
outputType |
string |
The type of output ['var', 'ES6'] |