Verdaccio 推荐方案和包的隐私保护

🌙
手机阅读
本文目录结构

推荐方案

以下指南列出了收集的最佳做法,我们通常建议所有用户这样做。

不要将本指南视为强制性的,您可以根据需要选择其中一些。

私人注册

您可以添加用户并管理哪个用户可以访问哪个包。

建议您为私有软件包定义一个前缀,例如 local-* 或作用域 @my-company/*,这样所有私有事物都将如下所示:local-foo

通过这种方法您可以清楚地把公有包和私有包分开。

 packages:
   '@my-company/*':
     access: $all
     publish: $authenticated
    'local-*':
     access: $all
     publish: $authenticated
   '@*/*':
     access: $all
     publish: $authenticated
   '**':
     access: $all
     publish: $authenticated

永远记住,软件包访问的顺序很重要,软件包始终从上到下进行处理。

从 npmjs.org 使用公有包

如果一些包没有在存储里,服务器将试着从 npmjs.org 中取它。 如果 npmjs.org 坏了,它会假装没有其他的包存在,并起到缓存包的作用。

Verdaccio 将仅下载所需的内容(= 客户端请求),并且此信息将被缓存,因此,如果客户端第二次询问相同的内容,则无需询问 npmjs.org 就可以提供服务。

例:

如果您 express@4.0.1 一次成功地从该服务器请求,即使 npmjs.org 处于关闭状态,您也可以在任何时候再次执行此操作(包含所有依赖项)。

但是,要说 express@4.0.0 到有人真正需要它,才能下载。并且,如果 npmjs.org 处于脱机状态,则该服务器将仅发布 express@4.0.1(= 仅缓存中的内容),而不会发布其他任何内容。

覆盖公共包

如果您想使用某个公共软件包的修改版本 foo,则可以将其发布到本地服务器上,因此在键入时 npm install foo,它将考虑安装您的版本。

这里有两个选项:

    1. 您要创建一个单独的派生并停止与公共版本同步。

如果您希望这么做,您应该修改配置文件,这样 verdaccio 将不再向 npmjs 提出此包的请求。

为此包添加一个单独的条目到 config.yaml 并从代理列表中删除 npmjs 并重新启动服务器。

 packages:
   '@my-company/*':
     access: $all
     publish: $authenticated
# comment it out or leave it empty
# proxy:

在本地发布软件包时,您可能应该使用比现有版本更高的版本字符串开头,这样它就不会与缓存中的现有软件包冲突。

    1. 您希望临时使用自己的版本,但在它更新后立即切换回公共版本。

为了避免版本冲突,您应该使用下一个补丁版本的自定义预发行后缀。例如,如果公共软件包的版本为 0.1.2,则可以上载 0.1.3-my-temp-fix

npm version 0.1.3-my-temp-fix
npm --publish --tag fix --registry http://localhost:4873

这样,您的软件包将一直使用,直到其原始维护者将其公共软件包更新为为止 0.1.3

安全

安全始于您的环境,为此,我们完全建议您阅读 10 npm Security Best Practices 并遵循建议。

包的访问

默认情况下,您在 Verdaccio 中发布的所有软件包都可供所有公众访问,我们完全建议保护您的注册表,防止外部非授权用户将 access 属性更新为 $authenticated

packages:
    '@my-company/*':
        access: $authenticated
        publish: $authenticated
    '@*/*':
        access: $authenticated
        publish: $authenticated
    '**':
        access: $authenticated
        publish: $authenticated

这样,除非获得授权并且私有软件包不会在用户界面中显示,否则没有人会提前进行注册。

服务器

安全连接

使用 HTTPS 是一个常见的建议,出于这个原因,我们建议您阅读 SSL 部分以确保 Verdaccio 的安全,或者在 Verdaccio 之上使用 HTTPS 反向代理。

令牌过期

verdaccio@3.x 令牌中没有到期日期。因此,我们在下一个介绍 verdaccio@4.x 了 JWT 功能 PR#896

security:
  api:
    jwt:
      sign:
        expiresIn: 15d
        notBefore: 0
  web:
    sign:
      expiresIn: 7d

使用此配置将覆盖当前系统,并且您将能够控制令牌的有效期。

使用 JWT 还可以提高身份验证插件的性能,旧系统将执行解包并验证每个请求中的凭据,而 JWT 将依靠令牌签名来避免插件的开销。

附带说明一下,在 npmjs 上,令牌永不过期

包的隐私保护

verdaccio 允许您保护发布,以达到需要正确设置软件包访问权限的目的。

包配置

例如,让我们一起来看以下设置。 您有一组前缀为 my-company-*的依赖项,您要保护它们不让匿名或另一个没有正确证书的已登录用户使用。

  'my-company-*':
    access: admin teamA teamB teamC
    publish: admin teamA
    proxy: npmjs

使用此配置,基本上,我们允许组 admin 和 teamA 发布和 teamS teamS teamS 访问此类依赖项。

用例:teamD 试着访问此依赖项

因此,如果我以 teamD 身份登录。 我不应该能够访问与 my-company- *模式匹配的所有依赖项。

➜ npm whoami
teamD

我将无法访问此类依赖项,也不会通过网络显示给用户 teamD。 如果我尝试访问,则会发生以下情况。

➜ npm install my-company-core
npm ERR! code E403
npm ERR! 403 Forbidden: webpack-1@latest

或者用 yarn

➜ yarn add my-company-core
yarn add v0.24.6
info No lockfile found.
[1/4] 🔍  Resolving packages...
错误出现意外错误:"http://localhost:5555/webpack-1: 不允许未注册用户访问 my-company-core 包"。

AXIHE / 精选资源

浏览全部教程

面试题

学习网站

前端培训
自己甄别

前端书籍

关于朱安邦

我叫 朱安邦,阿西河的站长,在杭州。

以前是一名平面设计师,后来开始接接触前端开发,主要研究前端技术中的JS方向。

业余时间我喜欢分享和交流自己的技术,欢迎大家关注我的 Bilibili

关注我: Github / 知乎

于2021年离开前端领域,目前重心放在研究区块链上面了

我叫朱安邦,阿西河的站长

目前在杭州从事区块链周边的开发工作,机械专业,以前从事平面设计工作。

2014年底脱产在老家自学6个月的前端技术,自学期间几乎从未出过家门,最终找到了满意的前端工作。更多>

于2021年离开前端领域,目前从事区块链方面工作了