跳到主要内容
版本号: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

高级设置

离线发布

By default Verdaccio does not allow you to publish packages when the client is offline. 可以通过将此值设置为 true 来覆盖此设置。

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

Checking Package Ownership

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

publish:
check_owners: false

Keep Readmes

By default, Verdaccio stores only the readme markdown of the latest version for each package. Setting keep_readmes to 'tagged' keeps the readmes of versions with dist-tags (for example, latest, next, and major branches). Using the 'all' setting will retain the complete history of readme versions. Note that 'all' can significantly increase the required storage space for packages published to Verdaccio!

publish:
keep_readmes: 'tagged'

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 #

为用户端 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 或 HTTPS 代理,也可以为每个上行链路单独定义 HTTP 或 HTTPS 代理。 上行链路的定义具有更高的优先级。 代理协议(HTTP 或 HTTPS)必须与注册表或上行链路 URL 的协议相匹配。

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();