0.1.0 β’ Published 8 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
npmoryarnβ - 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-poweredUsage
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
functionis called.optionsis passed as argument unlessoptionsistrue, in which case no options are passed. - Use. If the Initialization step returns a
function, then it is added to its host by calling theusefunction, 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. |