Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/stephenkr/nuxt-feature-toggle
The nuxt feature toggle module
https://github.com/stephenkr/nuxt-feature-toggle
feature nuxt nuxt-module nuxtjs toggle toggle-switches
Last synced: 23 days ago
JSON representation
The nuxt feature toggle module
- Host: GitHub
- URL: https://github.com/stephenkr/nuxt-feature-toggle
- Owner: stephenkr
- License: mit
- Created: 2019-05-18T19:57:13.000Z (about 5 years ago)
- Default Branch: master
- Last Pushed: 2023-03-07T08:10:26.000Z (over 1 year ago)
- Last Synced: 2024-05-31T08:22:47.775Z (24 days ago)
- Topics: feature, nuxt, nuxt-module, nuxtjs, toggle, toggle-switches
- Language: JavaScript
- Homepage: https://www.npmjs.com/package/nuxt-feature-toggle
- Size: 2.53 MB
- Stars: 90
- Watchers: 2
- Forks: 7
- Open Issues: 18
-
Metadata Files:
- Readme: Readme.md
- Changelog: CHANGELOG.md
- License: LICENSE
Lists
- awesome-nuxt - nuxt-feature-toggle - Nuxt module for managing feature toggles. (Uncategorized / Uncategorized)
- awesome-nuxt - nuxt-feature-toggle - Nuxt module for managing feature toggles. (Uncategorized / Uncategorized)
- awesome-nuxt - nuxt-feature-toggle - Nuxt module for managing feature toggles. (Uncategorized / Uncategorized)
- awesome-nuxt - nuxt-feature-toggle - Nuxt module for managing feature toggles. (Uncategorized / Uncategorized)
README
nuxt-feature-toggle
This is a simple module for Nuxt.js to add support for a feature toggle system.
## Features
- Dynamically pull in your feature toggles when the application starts
- Set a static list of feature toggles
- Optional query string support to override a feature toggle## Usage
### 1. Install the plugin
```sh
npm install nuxt-feature-toggle
# or
yarn add nuxt-feature-toggle
```### 2. Add module to nuxt.config.js along with the feature toggle options.
The toggles can be defined as a function or just as an object.
#### As a function
```javascript
module.exports = {
modules: ['nuxt-feature-toggle'],featureToggle: {
toggles: () => {
return Promise.resolve({
'my-unique-key': true
})
}
}
}
```#### As an object
```javascript
module.exports = {
modules: ['nuxt-feature-toggle'],featureToggle: {
toggles: {
'my-unique-key': true
}
}
}
```### 2. Use the feature toggle component
```html
This can only show if the toggle is enabled
```
## RuntimeConfig support
If using Nuxt >= 2.13, you can use the new `publicRuntimeConfig` setting in `nuxt.config.js` to **configure
feature toggles on-the-fly without having to rebuild** (only need to restart Nuxt using `nuxt start`).```javascript
module.exports = {
modules: ['nuxt-feature-toggle'],
publicRuntimeConfig: {
featureToggle:{
toggles: {
somePreviewFeature: process.env.FEATURE_ENABLE_SOME_PREVIEW_FEATURE,
}
}
}
}
```
> Note 1: `FEATURE_ENABLE_SOME_PREVIEW_FEATURE` is an arbitrary name, the package doesn't depend on it.
You can use "Feature Flag" names eg. `FF_PREVIEW_FEATURE` or whatever suits you.> Note 2: This package has built-in [yn](https://github.com/sindresorhus/yn) support which mean you don't have to do anything to get your env variable as Boolean value. You can also use `0/1`, `y/n` or any other value supported by the package. This will also work when `queryString` is set to `true`.
Now you just need to change your environment variables an restart Nuxt to toggle your features!
### Important note on `publicRuntimeConfig` and Promise / function based toggles
**If you're using function/promise based toggles resolution, you should not use `publicRuntimeConfig`:**
while it's technically *possible* to use a function in `runtimeConfig`, [it is not recommended](https://nuxtjs.org/guide/runtime-config/).**A function/promise based toggles resolution will NOT be resolved in the plugin, only on build.**
Instead you should either:
* Use a Promise/Function in `featureToggle.toggles` like you did before
* Switch to object mode in `publicRuntimeConfig.featureToggle.toggles`.As now you can use environment variables and just restart the server, many people can get rid of Promises returning toggles depending on the environment.
## Use with the query string
To use the query string with your feature toggles, first enable it in your configuration file.
```javascript
module.exports = {
modules: ['nuxt-feature-toggle'],featureToggle: {
queryString: true,
toggles: {
'my-unique-key': true
}
}
}
```The option `queryString` is used to enable query string support, so if the url contains a toggle query string, then the feature toggles with the matching value will be forced to show.
### Change key prefix
To change the default toggle prefix for `toggle`, you can now pass an option to change it to anything you like, such as:
```html
This can only show if the toggle is enabled
```
In this case, the key is now `_t_my-unique-key`
### Allowing access
You can control the access of the query string using a function, this can be defined using the following approach.
1. Create a new plugin file and import it into your nuxt.config.js file.
2. Add the following code to your new plugin
```javascript
export default function({ $featureToggle }) {
$featureToggle.isQueryStringAllowed(props => {
return true;
})
}
```Here you can access the props for the feature toggle component, and you can access the context using the exported function.
If no function is defined, and the `queryString` option is true, then all query strings are allowed.
### Usage
Once the querystring options are setup, you can enter the following to change the feature toggle, ensure `toggle_` is prefixed to the name of the feature toggle.
```
https://website.com?toggle_my-unique-key=false
```This will set the feature toggle 'my-unique-key' to false when viewing the page.
# To use the demo
1. Go to the `examples/demo` folder
2. Run the command `yarn`
3. Once done, run `yarn dev`
4. Navigate to `http://localhost:3000`## About the demo
The demo will show how the query string functionality works with the feature toggles. You should see a control box on the left hand side where you can manipulate the query strings in the URL. This will update the feature toggle on the page.
![](./docs/assets/demo-1.gif)
# License