Skip to content

AndreasPizsa/plugin-powered

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

12 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Build Status NPM version Greenkeeper badge

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 or yarn βœ“
  • 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

  1. Resolve Name. baseDir/name, baseDir/prefix-name, name, prefix-name
  2. Loading. The resolved module name is loaded using require.
  3. Initialization. Its exported function is called. options is passed as argument unless options is true, in which case no options are passed.
  4. Use. If the Initialization step returns a function, then it is added to its host by calling the use function, i.e. use(pluginReturnValue).
  5. 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.

Releases

No releases published

Packages

No packages published