跳到主要内容
版本号:Next

中间件插件

什么是中间件插件?

中间件插件能够修改 API(Web 和 CLI)层,添加新接口或拦截请求。

API

interface IPluginMiddleware<T> extends IPlugin<T> {
register_middlewares(app: any, auth: IBasicAuth<T>, storage: IStorageManager<T>): void;
}

register_middlewares

该方法通过 authstorage 提供对身份验证和存储的完全访问。 app 是允许您添加新接口的 Express 应用程序。

public register_middlewares(
app: Application,
auth: IBasicAuth<CustomConfig>,
storage: IStorageManager<CustomConfig>
): void {
const router = Router();
router.post(
'/custom-endpoint',
(req: Request, res: Response & { report_error?: Function }, next: NextFunction): void => {
const encryptedString = auth.aesEncrypt(Buffer.from(this.foo, 'utf8'));
res.setHeader('X-Verdaccio-Token-Plugin', encryptedString.toString());
next();
}
);
app.use('/-/npm/something-new', router);
}

authstorage 是具体的实例,可以扩展,但我们不推荐这种方法,除非有充分的依据。

verdaccio-audit 是中间件插件的一个很好的例子。

生成一个中间件插件

有关详细信息,请查看我们的插件生成器页面。 在终端上运行yo命令,按照步骤操作。

➜ yo verdaccio-plugin

Just found a `.yo-rc.json` in a parent directory.
Setting the project root at: /Users/user/verdaccio_yo_generator

_-----_ ╭──────────────────────────╮
| | │ Welcome to │
|--(o)--| │ generator-verdaccio-plug │
`---------´ │ in plugin generator! │
( _´U`_ ) ╰──────────────────────────╯
/___A___\ /
| ~ |
__'.___.'__
´ ` |° ´ Y `

? What is the name of your plugin? custom-endpoint
? Select Language typescript
? What kind of plugin you want to create? middleware
? Please, describe your plugin awesome middleware plugin
? GitHub username or organization myusername
? Author's Name Juan Picado
? Author's Email jotadeveloper@gmail.com
? Key your keywords (comma to split) verdaccio,plugin,middleware,awesome,verdaccio-plugin
create verdaccio-plugin-custom-endpoint/package.json
create verdaccio-plugin-custom-endpoint/.gitignore
create verdaccio-plugin-custom-endpoint/.npmignore
create verdaccio-plugin-custom-endpoint/jest.config.js
create verdaccio-plugin-custom-endpoint/.babelrc
create verdaccio-plugin-custom-endpoint/.travis.yml
create verdaccio-plugin-custom-endpoint/README.md
create verdaccio-plugin-custom-endpoint/.eslintrc
create verdaccio-plugin-custom-endpoint/.eslintignore
create verdaccio-plugin-custom-endpoint/src/index.ts
create verdaccio-plugin-custom-endpoint/index.ts
create verdaccio-plugin-custom-endpoint/tsconfig.json
create verdaccio-plugin-custom-endpoint/types/index.ts
create verdaccio-plugin-custom-endpoint/.editorconfig

I'm all done. 运行npm install来安装所需的依赖项。 如果失败,尝试自己运行该命令。


⸨ ░░░░░░░░░░░░░░░░░⸩ ⠋ fetchMetadata: sill pacote range manifest for @babel/plugin-syntax-jsx@^7.7.4 fetc

待安装完成,就可以访问你的项目了。

➜ cd verdaccio-plugin-auth-service-name
➜ cat package.json

{
"name": "verdaccio-plugin-custom-endpoint",
"version": "0.0.1",
"description": "awesome middleware plugin",
...

中间件是在内置接口之后注册的,因此无法覆盖已实现的接口。

社区中间件插件列表

  • verdaccio-audit:用于支持 npm audit CLI 的 verdaccio 插件(内置)(自 3.x 起兼容)

  • verdaccio-profile-api:用于 npm profile CLI 支持的 verdaccio 插件和 npm profile set password 来支持基于 verdaccio-htpasswd 的身份验证

  • verdaccio-https Verdaccio 中间件插件,如果设置了 x-forwarded-proto 头信息,则重定向至 https

  • verdaccio-badges 用于提供版本徽章生成器接口的 verdaccio 插件

  • verdaccio-openmetrics Verdaccio 插件暴露了一个 OpenMetrics/Prometheus 接口,其中包含健康和流量度量指标

  • verdaccio-sentry 统计登录错误

  • verdaccio-pacman Verdaccio 中间件插件,用于管理包的标签和版本