项目作者: AndreasPizsa

项目描述 :
Your app powered by plugins 🚀💫 Universal Plugin Loader
高级语言: JavaScript
项目地址: git://github.com/AndreasPizsa/plugin-powered.git
创建时间: 2017-10-15T08:39:05Z
项目社区:https://github.com/AndreasPizsa/plugin-powered

开源协议:

下载


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

  1. {
  2. "cors": {
  3. "origin": "http://example.com",
  4. "optionsSuccessStatus": 200
  5. },
  6. "express-session": {
  7. "secret": "keyboard cat",
  8. "resave": false,
  9. "saveUninitialized": true,
  10. "cookie": {
  11. "secure": true
  12. }
  13. }
  14. }

index.js

  1. const loadPlugins = require('plugin-powered')
  2. const plugins = require('./plugins.json')
  3. const app = require('express')()
  4. loadPlugins(app, plugins)
  5. // done! 🚀💫

Installation

  1. $ 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:

  1. module.exports = function plugin(options) {
  2. // do things
  3. }

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.