mirror of
https://github.com/verdaccio/verdaccio.git
synced 2024-11-13 03:35:52 +01:00
230 lines
8.3 KiB
Markdown
230 lines
8.3 KiB
Markdown
---
|
|
id: plugins
|
|
title: "Plugins"
|
|
---
|
|
|
|
Verdaccio is a pluggable application. It can be extended in many ways, either new authentication methods, adding endpoints or using a custom storage.
|
|
|
|
There are 5 types of plugins:
|
|
|
|
* [Authentication](plugin-auth.md)
|
|
* [Middleware](plugin-middleware.md)
|
|
* [Storage](plugin-storage.md)
|
|
* Custom Theme and filters
|
|
|
|
> If you are interested to develop your own plugin, read the [development](dev-plugins.md) section.
|
|
|
|
## Usage {#usage}
|
|
|
|
### Installation {#installation}
|
|
|
|
```bash
|
|
$> npm install --global verdaccio-activedirectory
|
|
```
|
|
|
|
`verdaccio` as a sinopia fork it has backward compatibility with plugins that are compatible with `sinopia@1.4.0`. In such case the installation is the same.
|
|
|
|
```
|
|
$> npm install --global sinopia-memory
|
|
```
|
|
|
|
### Configuration {#configuration}
|
|
|
|
Open the `config.yaml` file and update the `auth` section as follows:
|
|
|
|
The default configuration looks like this, due we use a build-in `htpasswd` plugin by default that you can disable just commenting out the following lines.
|
|
|
|
### Naming convention {#naming-convention}
|
|
|
|
Since version `2.0.0` until version plugins must start with the following convention:
|
|
|
|
- `sinopia-xxx` (deprecated and will be removed on 6.x.x)
|
|
- `verdaccio-xxx`
|
|
|
|
After version `5.12.0` scoped plugins are supported, for example:
|
|
|
|
```yaml
|
|
auth:
|
|
'@my-org/auth-awesome-plugin':
|
|
foo: some value
|
|
bar: another value
|
|
store:
|
|
'@my-org/store-awesome-plugin':
|
|
foo: some value
|
|
bar: another value
|
|
middleware:
|
|
'@my-org/middleware-awesome-plugin':
|
|
foo: some value
|
|
bar: another value
|
|
```
|
|
### Authentication Configuration {#authentication-configuration}
|
|
|
|
```yaml
|
|
auth:
|
|
htpasswd:
|
|
file: ./htpasswd
|
|
# max_users: 1000
|
|
```
|
|
|
|
and replacing them with (in case you decide to use a `ldap` plugin.
|
|
|
|
```yaml
|
|
auth:
|
|
activedirectory:
|
|
url: "ldap://10.0.100.1"
|
|
baseDN: 'dc=sample,dc=local'
|
|
domainSuffix: 'sample.local'
|
|
```
|
|
|
|
#### Multiple Authentication plugins {#multiple-authentication-plugins}
|
|
|
|
This is technically possible, making the plugin order important, as the credentials will be resolved in order.
|
|
|
|
```yaml
|
|
auth:
|
|
htpasswd:
|
|
file: ./htpasswd
|
|
#max_users: 1000
|
|
activedirectory:
|
|
url: "ldap://10.0.100.1"
|
|
baseDN: 'dc=sample,dc=local'
|
|
domainSuffix: 'sample.local'
|
|
```
|
|
|
|
### Middleware Configuration {#middleware-configuration}
|
|
|
|
This is an example how to set up a middleware plugin. All middleware plugins must be defined in the **middlewares** namespace.
|
|
|
|
```yaml
|
|
middlewares:
|
|
audit:
|
|
enabled: true
|
|
```
|
|
|
|
> You might follow the [audit middle plugin](https://github.com/verdaccio/verdaccio-audit) as base example.
|
|
|
|
### Storage Configuration {#storage-configuration}
|
|
|
|
This is an example how to set up a storage plugin. All storage plugins must be defined in the **store** namespace.
|
|
|
|
```yaml
|
|
store:
|
|
memory:
|
|
limit: 1000
|
|
```
|
|
|
|
### Theme Configuration {#theme-configuration}
|
|
|
|
Verdaccio allows to replace the User Interface with a custom one, we call it **theme**.
|
|
By default, uses `@verdaccio/ui-theme` that comes built-in, but, you can use something different installing your own plugin.
|
|
|
|
```bash
|
|
|
|
$> npm install --global verdaccio-theme-dark
|
|
|
|
```
|
|
|
|
> The plugin name prefix must start with `verdaccio-theme`, otherwise the plugin won't load.
|
|
|
|
|
|
You can load only one theme at a time and pass through options if you need it.
|
|
|
|
```yaml
|
|
theme:
|
|
dark:
|
|
option1: foo
|
|
option2: bar
|
|
```
|
|
|
|
### Theme plugin development
|
|
|
|
> Since v.5.0.0
|
|
|
|
If you have a custom UI plugin for the them you will need to adapt your build to the new requirements.
|
|
|
|
The previous version you only need to return a function with a string and the path of the directory.
|
|
|
|
```
|
|
const path = require('path');
|
|
|
|
module.exports = () => {
|
|
return path.join(__dirname, 'static');
|
|
};
|
|
```
|
|
|
|
The module must return an object and the `index.html` is ignored since support dynamic rendering, eg:
|
|
|
|
```
|
|
staticPath: '/somePath/node_modules/verdaccio-theme-custom/static',
|
|
manifest: {
|
|
'main.js': '-/static/main.c21a97b1dbe8456a9c76.js',
|
|
'runtime.js': '-/static/runtime.c21a97b1dbe8456a9c76.js',
|
|
'NotFound.js': '-/static/NotFound.c21a97b1dbe8456a9c76.js',
|
|
'Provider.js': '-/static/Provider.c21a97b1dbe8456a9c76.js',
|
|
'Version.js': '-/static/Version.c21a97b1dbe8456a9c76.js',
|
|
'Home.js': '-/static/Home.c21a97b1dbe8456a9c76.js',
|
|
'Versions.js': '-/static/Versions.c21a97b1dbe8456a9c76.js',
|
|
'UpLinks.js': '-/static/UpLinks.c21a97b1dbe8456a9c76.js',
|
|
'Dependencies.js': '-/static/Dependencies.c21a97b1dbe8456a9c76.js',
|
|
'Engines.js': '-/static/Engines.c21a97b1dbe8456a9c76.js',
|
|
'Dist.js': '-/static/Dist.c21a97b1dbe8456a9c76.js',
|
|
'Install.js': '-/static/Install.c21a97b1dbe8456a9c76.js',
|
|
'Repository.js': '-/static/Repository.c21a97b1dbe8456a9c76.js',
|
|
'vendors.js': '-/static/vendors.c21a97b1dbe8456a9c76.js',
|
|
'718.c21a97b1dbe8456a9c76.js': '-/static/718.c21a97b1dbe8456a9c76.js',
|
|
'238.c21a97b1dbe8456a9c76.js': '-/static/238.c21a97b1dbe8456a9c76.js',
|
|
'73.c21a97b1dbe8456a9c76.js': '-/static/73.c21a97b1dbe8456a9c76.js'
|
|
},
|
|
manifestFiles: { js: [ 'runtime.js', 'vendors.js', 'main.js' ] }
|
|
```
|
|
- `staticPath`: is the same data returned in Verdaccio 4.
|
|
- `manifest`: A webpack manifest object.
|
|
- `manifestFiles`: A object with one property `js` and the array (order matters) of the manifest id to be loaded in the template dynamically.
|
|
|
|
#### Manifest and Webpack {#manifest-and-webpack}
|
|
|
|
Verdaccio uses the webpack [manifest](https://webpack.js.org/concepts/manifest/) object to render the html dynamically, in combination with the `manifestFiles` the application understand what to render.
|
|
|
|
> Currently only support `js` but if you also need `css`, we are open to discuss it and further improvements.
|
|
|
|
```
|
|
const { WebpackManifestPlugin } = require('webpack-manifest-plugin');
|
|
|
|
plugins: [
|
|
...
|
|
new WebpackManifestPlugin({
|
|
removeKeyHash: true,
|
|
}),
|
|
...
|
|
],
|
|
|
|
```
|
|
|
|
## Legacy plugins {#legacy-plugins}
|
|
|
|
### Sinopia Plugins {#sinopia-plugins}
|
|
|
|
> If you are relying on any sinopia plugin, remember are deprecated and might no work in the future.
|
|
|
|
* [sinopia-npm](https://www.npmjs.com/package/sinopia-npm): auth plugin for sinopia supporting an npm registry.
|
|
* [sinopia-memory](https://www.npmjs.com/package/sinopia-memory): auth plugin for sinopia that keeps users in memory.
|
|
* [sinopia-github-oauth-cli](https://www.npmjs.com/package/sinopia-github-oauth-cli).
|
|
* [sinopia-crowd](https://www.npmjs.com/package/sinopia-crowd): auth plugin for sinopia supporting atlassian crowd.
|
|
* [sinopia-activedirectory](https://www.npmjs.com/package/sinopia-activedirectory): Active Directory authentication plugin for sinopia.
|
|
* [sinopia-github-oauth](https://www.npmjs.com/package/sinopia-github-oauth): authentication plugin for sinopia2, supporting github oauth web flow.
|
|
* [sinopia-delegated-auth](https://www.npmjs.com/package/sinopia-delegated-auth): Sinopia authentication plugin that delegates authentication to another HTTP URL
|
|
* [sinopia-altldap](https://www.npmjs.com/package/sinopia-altldap): Alternate LDAP Auth plugin for Sinopia
|
|
* [sinopia-request](https://www.npmjs.com/package/sinopia-request): An easy and fully auth-plugin with configuration to use an external API.
|
|
* [sinopia-htaccess-gpg-email](https://www.npmjs.com/package/sinopia-htaccess-gpg-email): Generate password in htaccess format, encrypt with GPG and send via MailGun API to users.
|
|
* [sinopia-mongodb](https://www.npmjs.com/package/sinopia-mongodb): An easy and fully auth-plugin with configuration to use a mongodb database.
|
|
* [sinopia-htpasswd](https://www.npmjs.com/package/sinopia-htpasswd): auth plugin for sinopia supporting htpasswd format.
|
|
* [sinopia-leveldb](https://www.npmjs.com/package/sinopia-leveldb): a leveldb backed auth plugin for sinopia private npm.
|
|
* [sinopia-gitlabheres](https://www.npmjs.com/package/sinopia-gitlabheres): Gitlab authentication plugin for sinopia.
|
|
* [sinopia-gitlab](https://www.npmjs.com/package/sinopia-gitlab): Gitlab authentication plugin for sinopia
|
|
* [sinopia-ldap](https://www.npmjs.com/package/sinopia-ldap): LDAP auth plugin for sinopia.
|
|
* [sinopia-github-oauth-env](https://www.npmjs.com/package/sinopia-github-oauth-env) Sinopia authentication plugin with github oauth web flow.
|
|
|
|
> All sinopia plugins should be compatible with all future verdaccio versions. Anyhow, we encourage contributors to migrate them to the
|
|
modern verdaccio API and using the prefix as *verdaccio-xx-name*.
|
|
|