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.
- 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 β
- Use different configurations for development, test and production
- Load configurations from files, databases, URLs, etc
./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! ππ«
$ npm i plugin-powered
loadPlugins(target, plugins[, options])
or
loadPlugins(plugins, options)
object
| function
| Array
object
| function
| Array
optionally specifies where plugins should be installed.
optional
string
default: 'use'
Name of the use
method. target[use]
must be a function
null
| object
| function
| Array
|Β Console
| logger
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
}
- 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.
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. |