阿西河

所有教程

公众号
🌙
阿西河前端的公众号

我的收藏

    最近访问  (文章)

      教程列表

      抓包专区
      测试专区

      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 包"。
      
      目录
      目录