# plugin

> Plugin library

Latest version **0.3.3** (published 2015-01-14) · 0 weekly downloads

## Install

```sh
npm install plugin
pnpm add plugin
yarn add plugin
bun add plugin
```

## Health

**Score 10/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support; low quality score; pre 1.0.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.3.3 |
| Published | 2015-01-14 |
| First published | 2012-02-15 |
| Weekly downloads | 0 |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 9 |
| Known vulnerabilities | 0 (+3 in 2 direct dependencies) |
| Install scripts | no |
| GitHub stars | 14 |
| Author | Craig Condon |
| Maintainers | architectd |

## Links

- npm: https://www.npmjs.com/package/plugin
- Repository: https://github.com/crcn/plugin.js
- Issues: https://github.com/crcn/plugin.js/issues
- npm.io page: https://npm.io/package/plugin

## Dependencies (9)

- [dref](https://npm.io/package/dref.md) 0.0.x
- [sift](https://npm.io/package/sift.md) 0.0.x
- [step](https://npm.io/package/step.md) 0.0.x
- [async](https://npm.io/package/async.md) 0.1.x
- [outcome](https://npm.io/package/outcome.md) 0.0.x
- [resolve](https://npm.io/package/resolve.md) 0.2.x
- [structr](https://npm.io/package/structr.md) 0.2.x
- [toarray](https://npm.io/package/toarray.md) 0.0.x
- [underscore](https://npm.io/package/underscore.md) 1.4.x

## Recent versions

- 0.3.3 (latest) — 2015-01-14
- 0.3.2 — 2013-03-18
- 0.3.1 — 2013-02-23
- 0.3.0 — 2013-02-17
- 0.2.7 — 2013-02-05
- 0.2.6 — 2013-01-22
- 0.2.5 — 2012-12-02
- 0.2.4 — 2012-11-26
- 0.2.3 — 2012-11-26
- 0.2.2 — 2012-11-01
- 0.2.1 — 2012-10-31
- 0.2.0 — 2012-10-31
- 0.1.0 — 2012-10-26
- 0.0.15 — 2012-03-05
- 0.0.14 — 2012-02-24
- … 1 more at https://npm.io/package/plugin/versions

## README

# Plugin.js

## Features

- ability to load entire directories
- add remote plugins (dnode)

## Example

bootstrap.js

```javascript
var plugin = require("plugin"),
express = require("express"),

plugin(express()).
params({
	http: { port: 8080 }
}).
require(__dirname + "/config.js").
require(__dirname + "/someRoutes.js").
load();
```

config.js

```javascript
exports.plugin = function(server, loader) {
	server.listen(loader.params("http.port") || 80);
}
```

someRoutes.js
```javascript
module.exports = function(server) {
    server.get("/hello", function(req, res) {
        res.end("world!");
    })
}
```


## Plugin API

### loader .plugin(plugInto, ...)

Initializes the loader for local / remote plugins. `plugInto` is passed into the first parameter when calling `.plugin()` on each required module.

### loader.use(extension)

Extends the loader. This allows you to customize how modules are loaded into your sandbox.

```javascript
require("plugin")().
use(require("plugin-dnode")).
require("dnode://localhost").
load();
```

### loader.params(keyOrParams, value)

Get / set params

bootstrap.js

```javascript
require("plugin")().
params("some.message", 8080).
require(__dirname + "/hello.js").
load();
```

server.js
```javascript
exports.plugin = function(loader) {
	console.log(loader.params("some.message"));
}
```

### loader.require(source, ...)

path to the plugins

```javascript
loader.
require(__dirname + "/plugin.js").
require(__dirname + "/someDirectory.js").
require("multiple", "plugins").
require("dnode://localhost").
load();
```

### loader.load(callback)

loads the required dependencies

### loader.module(search)

Returns one loaded module based on the search query. Note that calling this method
may load the given module if it hasn't already. Here's a real-world example:

bootstrap.js

```javascript
require("plugin")().
params("http.port", 8080).
require(__dirname + "/server.js").
require(__dirname + "/routes.js").
load();
```

server.js

```javascript
exports.isHttpServer = true; //not needed - just used for searching
exports.plugin = function(loader) {
	var server = express();
	server.listen(loader.params("http.port"));
	return server;
}
```

routes.js

```javascript
exports.plugin = function(loader) {
	var server = loader.module("server");
	server.get("/hello", function(req, res) {
		res.end("hello world!");
	})
}
```

Also note that you can search based on attributes. Here's `routes.js` again:

```javascript
exports.plugin = function(loader) {
	var server = loader.module({ isHttpServer: true });
	//do stuff here
}
```

### loader.modules(search)

Just like `loader.module(search)`, but returns multiple modules.

### loader.exports

This is all the plugins combined, and it's set once everything's loaded.

---
_Source: https://npm.io/package/plugin · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
