0.1.0 β’ Published 7 years ago
plugin-powered v0.1.0
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. |