跳到主要内容
版本号:Next

配置文件

此文件是 Verdaccio 的重要部分, 您可以在其中修改默认行为, 启用插件并扩展功能。

首次运行 Verdaccio 时会自动生成默认的配置文件 config.yaml

默认配置

默认配置支持 私有(scoped) 包,并允许所有用户 访问 所有包,但只有已登陆用户才能 发布

storage: ./storage
auth:
htpasswd:
file: ./htpasswd
uplinks:
npmjs:
url: https://registry.npmjs.org/
packages:
'@*/*':
access: $all
publish: $authenticated
proxy: npmjs
'**':
proxy: npmjs
log: { type: stdout, format: pretty, level: http }

章节

以下各章节解释了每个属性的含义以及不同的选项。

存储

是默认的存储方式。 Verdaccio 默认使用内置本地文件模式存储

storage: ./storage

V5.6.0 发布:环境变量 VERDACCIO_STORAGE_PATH 可用于替换存储的位置(仅适用于默认存储,不适用于插件,除非它独立实现)。

.verdaccio-db 数据库

微型数据库用于存储用户发布的私有包。 该数据库基于 JSON 文件,其中包含已发布的私有包列表以及用于令牌签名的秘密令牌。 首次启动应用程序时会自动创建。

数据库的位置基于 config.yaml 文件夹位置,例如:

如果 config.yaml 位于 /some_local_path/config.yaml,则数据库将在 /some_local_path/storage/.verdaccio-db 中创建。

.verdaccio-db文件数据库只有在用户不使用自定义存储时可用,默认情况下,verdaccio 使用一个小型数据库来存储私有软件包,storage属性定义在 config.yaml 文件中。 根据操作系统的不同,位置可能会有所变化。 阅读 CLI 部分 以获取有关文件位置的更多详细信息。

数据库的结构基于 JSON 文件,例如:

{
"list": ["package1", "@scope/pkg2"],
"secret": "secret_token_32_characters_long"
}
  • list: 是一个数组,包含已发布的私有包的列表,这个列表上的任何项目都被认为是由用户发布的。
  • secret:secret 字段用于令牌签名和验证,适用于 JWT 或 legacy 令牌签名。

插件

插件目录的位置。 对于基于 Docker/Kubernetes 的部署很有用。

plugins: ./plugins

认证

在这里进行身份验证设置。 默认认证基于 htpasswd,并且是内置的。 你可以通过插件来修改这一行为。 有关此部分的更多信息,请阅读授权页面

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

Token 签名

默认令牌签名基于高级加密标准 (AES),其算法为 aes-256-ctr,称为legacy。 值得注意的是,legacy 的 token 没有设计过期机制。 如果需要过期功能,建议使用 JSON Web Tokens (JWT)

安全

安全配置允许使用两个选项自定义令牌签名。 配置分为两个部分:apiwebapi 上使用 JWT 时,(api)必须定义;否则,将使用 legacy 令牌签名 (aes-256-ctr)。

token 是如何生成的?

令牌签名需要由创建 .verdaccio-db 数据库的自定义插件生成的秘密令牌,或者在使用自定义存储的情况下,秘密令牌是从插件实现本身获取的。 无论如何,启动应用程序都需要秘密令牌

Legacy 令牌签名

legacy 属性用于启用旧令牌签名。 默认情况下启用。 Legacy 功能仅应用于 API,Web UI 默认使用 JWT。

security:
api:
legacy: true # 默认情况下为 true,即使此部分未定义

JWT 令牌签名

要启用新的 JWT(JSON Web令牌) 签名,需要将 jwt 块添加到 api 部分; web 中默认使用 jwt

通过使用 JWT 签名,还可以使用自己的属性来自定义签名和令牌验证

security:
api:
jwt:
sign:
expiresIn: 29d
verify:
someProp: [value]
web:
sign:
expiresIn: 1h # 1 hour by default
verify:
someProp: [value]

服务器

一组用于修改服务器应用程序行为的属性,特别是 API(Express.js)。

你可以为传入连接指定 HTTP/1.1 服务器 Keep-Alive 超时时间(以秒为单位)。 值 0 使 http 服务器的行为与 8.0.0 之前的 Node.js 版本类似,后者没有 Keep-Alive 超时时间。 解决方法:通过给定的配置,您可以解决以下问题 https://github.com/verdaccio/verdaccio/issues/301。 如果 60 不够,则设置为 0。

server:
keepAliveTimeout: 60

Web UI

此属性允许您修改 Web UI 的外观。 有关本节的更多信息,请阅读 web UI 页面

web:
enable: true
title: Verdaccio
logo: logo.png
scope:

当这些包在本地不可用时,上行链路增加了从远程注册表获取包的功能。 有关本节的更多信息,请阅读上行链接页面

uplinks:
npmjs:
url: https://registry.npmjs.org/

软件包

本部分允许您控制软件包的访问方式。 有关本部分的更多信息,请阅读 软件包页面

packages:
'@*/*':
access: $all
publish: $authenticated
proxy: npmjs

高级设置

离线发布

默认情况下,verdaccio 不允许你在客户端离线时发布软件包。 可以通过将此值设置为 true 来覆盖此设置。

publish:
allow_offline: false

检查包所有权

默认情况下,package access定义允许谁发布和取消发布程序包。 通过将 check_owners 设置为 true,仅允许程序包所有者对程序包进行更改。 包的第一所有者是发布第一个版本的用户。 可以使用 npm owner 添加或删除更多所有者。 您可以使用 npm owner list 或通过检查包清单下的 maintainers 来查找当前所有者的列表。

publish:
check_owners: false
Since: verdaccio@2.3.6 due #223

URL 前缀

该前缀用于服务器在代理之后运行时使用,如果在没有反向代理的情况下使用,则无法正常工作,请查看 反向代理设置 页面了解更多详细信息。

内部逻辑正确构建了公共 URL,验证了 host 标头和错误的 url_prefix

例如:url_prefix: /verdaccio, url_prefix: verdaccio/, url_prefix: verdaccio 将转换为 /verdaccio/

url_prefix: /verdaccio/

新的 VERDACCIO_PUBLIC_URL 用于代理后,该变量将用于:

  • 用作提供 UI 资源(js、favicon 等)的基本路径
  • 用于返回元数据 dist 基本路径
  • 忽略 hostX-Forwarded-Proto 请求头
  • 如果定义了url_prefix,则会将其附加到环境变量中。
VERDACCIO_PUBLIC_URL='https://somedomain.org';
url_prefix: '/my_prefix'

// url -> https://somedomain.org/my_prefix/

VERDACCIO_PUBLIC_URL='https://somedomain.org';
url_prefix: '/'

// url -> https://somedomain.org/

VERDACCIO_PUBLIC_URL='https://somedomain.org/first_prefix';
url_prefix: '/second_prefix'

// url -> https://somedomain.org/second_prefix/'

User Agent

自 verdaccio@5.4.0`

默认情况下,用户代理是禁用的,作为交换,用户代理客户端信息(包管理器、浏览器等)被直接透传到远程服务器。 要启用以前的行为,请使用布尔值。

user_agent: true
user_agent: false
user_agent: 'custom user agent'

用户速率限制

自: `verdaccio@5.4.0` [#](https://github.com/verdaccio/verdaccio/releases/tag/v5.4.0)

为用户端 npm tokennpm profilenpm login/adduser 和登录网站设置默认请求速率限制,以每 15 分钟限制 100 个请求为例,可通过以下方式定制:

userRateLimit:
windowMs: 50000
max: 1000

还可以通过中间件文档进行其他配置(仅限功能标志)。

最大请求体大小

默认情况下,JSON 文档的最大请求体大小为 10mb,如果遇到提示"request entity too large"的错误,你可以增加该值的大小。

max_body_size: 10mb

监听端口

verdaccio 默认在端口 4873 上运行。 可以通过 CLI 或在配置文件中更改端口。 以下选项是有效的:

listen:
# - localhost:4873 # default value
# - http://localhost:4873 # same thing
# - 0.0.0.0:4873 # listen on all addresses (INADDR_ANY)
# - https://example.org:4873 # if you want to use https
# - "[::1]:4873" # ipv6
# - unix:/tmp/verdaccio.sock # unix socket

HTTPS

要在 verdaccio 启用 https,只要用 https:// 协议来设置 listen 标志。 如需了解更多信息,请阅读文档中的 SSL 部分

https:
key: ./path/verdaccio-key.pem
cert: ./path/verdaccio-cert.pem
ca: ./path/verdaccio-csr.pem

代理

代理是特殊用途的 HTTP 服务器,用于将数据从远程服务器传输到本地客户机。

http_proxy 和 https_proxy

如果你的网络中有一个代理,你可以使用以下属性设置 X-Forwarded-For 报头:

http_proxy: http://something.local/
https_proxy: https://something.local/

no_proxy

此变量应包含一个逗号分隔的不应用于代理的域扩展列表。

no_proxy: localhost,127.0.0.1

通知

通过 webhook 启用对第三方工具的通知相当容易。 有关此部分的更多信息,请阅读通知页面

notify:
method: POST
headers: [{ 'Content-Type': 'application/json' }]
endpoint: https://usagge.hipchat.com/v2/room/3729485/notification?auth_token=mySecretToken
content: '{"color":"green","message":"New package published: * {{ name }}*","notify":true,"message_format":"text"}'

如需了解更详细的配置设置,请查看源代码

日志

支持两种记录器类型,您可以只选择其中一种:

控制台输出 (默认)

log: { type: stdout, format: pretty, level: http }

文件输出

log: { type: file, path: verdaccio.log, level: info }

有关完整信息-请参阅此处:Features/logger

Audit

自 verdaccio@3.0.0`

npm audit 是随 npm 6.x 发布的一项新命令。 Verdaccio 包含一个内置中间件插件来处理此命令。

使用新的安装方式会默认包含这个中间件,否则你需要添加下面这些属性到你的配置文件中

middlewares:
audit:
enabled: true
# timeout: 10000

实验性

此版本包含一个名为 experiments 的新属性,可以放置在 config.yaml 中,并且完全是可选的

我们希望能够在不影响生产环境的情况下发布新特性。 此标志允许我们添加新功能并从决定使用它们的社区获得反馈。

此标志下的功能可能不稳定或者可能会在未来的版本中被删除。

以下是一个例子:

experiments:
changePassword: false

要禁用控制台中的实验警告,你必须注释掉整个实验部分。

配置生成器 API

v5.23.1版本之后,新的高级配置构建器 API 可用。 该 API 是一种灵活的方式,可以使用构建器模式以 JSON 或 YAML 形式以编程方式生成配置输出,例如:

import { ConfigBuilder } from 'verdaccio';

const config = ConfigBuilder.build();
config
.addUplink('upstream', { url: 'https://registry.upstream.local' })
.addUplink('upstream2', { url: 'https://registry.upstream2.local' })
.addPackageAccess('upstream/*', {
access: 'public',
publish: 'foo, bar',
unpublish: 'foo, bar',
proxy: 'some',
})
.addLogger({ level: 'info', type: 'stdout', format: 'json' })
.addStorage('/tmp/verdaccio')
.addSecurity({ api: { legacy: true } });

// generate JSON object as output
config.getConfig();

// generate output as yaml
config.getAsYaml();