Salta al contenuto principale
Versione: 5.x (Latest)

Estensioni

Verdaccio è un'applicazione estensibile. Si può espandere in molti modi, o con nuovi metodi di autenticazione, aggiungendo endpoint o utilizzando un archivio personalizzato.

Sono presenti 4 tipi di plugin:

Se sei interessato a sviluppare il tuo plugin personale, leggi la sezione sviluppo.

Utilizzo

Installazione

$> npm install --global verdaccio-activedirectory

verdaccio essendo una fork di sinopia è retrocompatibile con i plugin compatibili con sinopia@1.4.0. In tal caso l'installazione è la stessa.

$> npm install --global sinopia-memory

Configurazione

Aprire il file config.yaml e aggiornare la sezione auth come segue:

La configurazione predefinita appare così, poiché usiamo un plugin htpasswd incorporato di default che si può disabilitare commentando le seguenti linee.

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:

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

auth:
htpasswd:
file: ./htpasswd
# max_users: 1000

and replacing them with (in case you decide to use a ldap plugin.

auth:
activedirectory:
url: "ldap://10.0.100.1"
baseDN: 'dc=sample,dc=local'
domainSuffix: 'sample.local'

Plugin di Autenticazione Multipla

This is technically possible, making the plugin order important, as the credentials will be resolved in order.

auth:
htpasswd:
file: ./htpasswd
#max_users: 1000
activedirectory:
url: "ldap://10.0.100.1"
baseDN: 'dc=sample,dc=local'
domainSuffix: 'sample.local'

Middleware Configuration

This is an example how to set up a middleware plugin. All middleware plugins must be defined in the middlewares namespace.

middlewares:
audit:
enabled: true

Si potrebbe seguire l'audit middle plugin come esempio di base.

Storage Configuration

This is an example how to set up a storage plugin. All storage plugins must be defined in the store namespace.

store:
memory:
limit: 1000

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.


$> npm install --global verdaccio-theme-dark

Il prefisso del nome del plugin deve cominciare con verdaccio-theme, altrimenti il plugin non caricherà.

You can load only one theme at a time and pass through options if you need it.

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

Verdaccio uses the webpack 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,
}),
...
],

Plugin ereditari

Sinopia Plugins

If you are relying on any sinopia plugin, remember are deprecated and might no work in the future.

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.