plugin-powered
v0.1.0
Published
Your app powered by plugins ๐๐ซ Universal Plugin Loader
Downloads
12
Maintainers
Readme
plugin-powered ๐๐ซ
Your app powered by plugins ยท Universal Plugin Loader
Plugins are great to build modular, extensible apps. Many frameworks have a use
or similar method to install plugins or middleware, but then the configuration is hardcoded, buried in code.
We can do better.
Features
- Add, remove and configure plugins without changing code โ
- Install community plugins using
npm
oryarn
โ - Use a local directory for project-specific plugins โ
- Define the load order of plugins โ
- Compatible with popular frameworks like Express, Micro, Koa, etc โ
- 100% code coverage โ
Benefits
- Use different configurations for development, test and production
- Load configurations from files, databases, URLs, etc
Example: Loading Express middleware
./plugins.json
{
"cors": {
"origin": "http://example.com",
"optionsSuccessStatus": 200
},
"express-session": {
"secret": "keyboard cat",
"resave": false,
"saveUninitialized": true,
"cookie": {
"secure": true
}
}
}
index.js
const loadPlugins = require('plugin-powered')
const plugins = require('./plugins.json')
const app = require('express')()
loadPlugins(app, plugins)
// done! ๐๐ซ
Installation
$ npm i plugin-powered
Usage
loadPlugins(target, plugins[, options])
or
loadPlugins(plugins, options)
target
object
| function
| Array
plugins
options
target
object
| function
| Array
optionally specifies where plugins should be installed.
use
optional
string
default: 'use'
Name of the use
method. target[use]
must be a function
errors
optional
null
| object
| function
| Array
|ย Console
| logger
Writing Plugins
Writing a plugin is super simple. A plugin is just a regular module that exports a function which takes a single parameter, options
:
module.exports = function plugin(options) {
// do things
}
Life Cycle
- Resolve Name.
baseDir/
name
,baseDir/prefix-
name
,name
,prefix-
name
- Loading. The resolved module name is loaded using
require
. - Initialization. Its exported
function
is called.options
is passed as argument unlessoptions
istrue
, in which case no options are passed. - Use. If the Initialization step returns a
function
, then it is added to its host by calling theuse
function, i.e.use(pluginReturnValue)
. - Execution.
Plugin options
| Value | Description |
|----------|-------------|
| false
| Disabled. A plugin thatโs set to false
will not be loaded and its function will not be called. |
| true
| Defaults. If your plugin accepts options, then the value true
should mean 'use meaningful defaults'. Note: The plugin will be called without any arguments. |
| other | Plugin Specific. Plugin authors are free to define whatever options
their plugin expects. |