likes
comments
collection
share

【私有NPM的超级英雄!】为什么你需要Verdaccio来拯救你的开发流程?🦸‍♂️你是否曾经遇到过这样的问题? 🤔

作者站长头像
站长
· 阅读数 15

你是否曾经遇到过这样的问题? 🤔

刚刚安装好一大堆 npm 包,结果网络突然掉线了!你顿时感到开发流程被卡住了,焦虑不已。别担心,Verdaccio来了,它就是你开发中的 "超级英雄"!让我们用一种轻松有趣的方式来聊聊 Verdaccio 为什么会成为你开发中的最佳伴侣。 🚀

Verdaccio 是什么? 🌟

Verdaccio 简直就像开发团队的“私人储物柜”,它是一个私有的 npm 代理服务器,让你可以把所有的 npm 包——无论是公开的还是私有的——都妥善收藏起来。还记得那种努力找东西但家里乱成一团的感觉吗?Verdaccio 就像是帮你把 npm 包都整齐分类的好帮手! 🗂️

为什么需要 Verdaccio?——理由妙不可言!(对比 Nexus) ⚖️

  1. 缓存有道,告别断网烦恼! 🛡️

    • Verdaccio:有了 Verdaccio,本地缓存可以保存你下载过的 npm 包。即使在网络不稳定或者断网的情况下,你依然可以继续进行开发,根本不用担心 npm 包安装失败的问题。💪
    • Nexus:同样提供缓存功能,但 Nexus 的设置相对复杂,特别是它支持多种包管理系统(如 Maven、NuGet、Docker 等),对于仅需要 npm 支持的小团队来说,这可能有些过重。⚙️
  2. 团队共享,效率翻倍! 🤝

    • Verdaccio:它完美支持团队内部共享自定义 npm 包。你可以把私有包安全地存储在公司内部,而不需要暴露在公共 npm 上,确保团队成员快速高效地共享资源。🚀
    • Nexus:尽管 Nexus 也提供类似的共享功能,但它更适合管理多类型包的场景。如果团队只需管理 npm 包,Verdaccio 更简单高效。👌
  3. 安全升级,依赖更放心! 🔒

    • Verdaccio:Verdaccio 为你的 npm 依赖提供了简洁有效的权限管理,支持私有包的访问控制,轻松保证开发环境的安全性。🔐
    • Nexus:在安全性方面,Nexus 的功能更为全面,它提供了细粒度的权限管理和审计功能,适合对安全要求极高的大型企业团队。🏢
  4. 简易安装,秒变 npm 超人! 🦸‍♀️

    • Verdaccio:安装简单,只需几条命令就能搭建自己的 npm 服务,五分钟不到你就能开始使用,真正做到了轻量且高效。⚡
    • Nexus:虽然功能强大,但安装和配置复杂,适合需要管理多种技术栈的企业级项目。对 npm 管理而言,Verdaccio 让你可以专注于开发,而不需要花太多时间在工具上。🛠️

话不多说,从零开始搭建! 🚀

  • docker-compose.yaml docker 容器配置
  • config.yaml Verdaccio 配置文件
  • htpasswd 用户密码文件
# 目录结构
 
└── /verdaccio 项目目录
   ├──/conf 配置目录
   │  └── config.yaml verdaccio 配置文件
   │  └── htpasswd 用户密码文件

   ├──/storage 包存放目录

   ├──/plugins 插件目录

   └── docker-compose.yaml docker-compose 配置文件

【私有NPM的超级英雄!】为什么你需要Verdaccio来拯救你的开发流程?🦸‍♂️你是否曾经遇到过这样的问题? 🤔

3.编写docker-compose.yaml 🎛️

version: '3.1'

services:
  verdaccio:
    image: verdaccio/verdaccio
    container_name: "verdaccio"
    networks:
      - node-network
    environment:
      - VERDACCIO_PORT=4873
    ports:
      - "4873:4873"
    volumes:
      - "./storage:/verdaccio/storage" #存储目录,用于保存npm包
      - "./conf:/verdaccio/conf" #配置文件目录
      - "./plugins:/verdaccio/plugins" #插件目录
networks:
  node-network:
    driver: bridge

4.编写Verdaccioconfig.yaml 📝

# npm包缓存目录
storage: /verdaccio/storage
# 插件目录
plugins: /verdaccio/plugins
# 密码文件
auth:
  htpasswd:
    file: /verdaccio/conf/htpasswd
# 上行源(同步开源镜像)
uplinks:
  npmjs:
    url: https://registry.npmjs.org
    timeout: 10s
    cache: false
  yarn:
    url: https://registry.yarnpkg.com
    timeout: 10s
    cache: false
  npmmirror:
    url: https://registry.npmmirror.com
# packages中三种角色 $all => 所有用户  $anonymous => 匿名用户  $authenticated => 登录的用户
packages:
  # 带@的scope包只能登录后发布
  "@*/*":
    # 访问包的权限
    access: $all
    # 发布包的权限
    publish: $authenticated
    # 代理链
    proxy: npmjs npmmirror yarn
  # 普通包所有人都能发布
  "**":
    access: $all
    publish: $all
    proxy: npmjs npmmirror yarn
middlewares:
  # 启用 npm audit
  audit:
    enabled: true
logs:
  - { type: stdout, format: pretty, level: http }
#监听端口
listen: 0.0.0.0:4873

packages 中共有三种用户角色:

角色描述
$all所有用户
$anonymous匿名用户
$authenticated登录的用户

Verdaccio启动 docker-compose up -d🌐

启动后,你就可以在http:yourip:4873中访问Verdaccio的UI了。 【私有NPM的超级英雄!】为什么你需要Verdaccio来拯救你的开发流程?🦸‍♂️你是否曾经遇到过这样的问题? 🤔

手已按捺不住,心跳加速中,赶紧发两个包试试看!

  • 把私服地址 配置到项目的 .npmrc 【私有NPM的超级英雄!】为什么你需要Verdaccio来拯救你的开发流程?🦸‍♂️你是否曾经遇到过这样的问题? 🤔
  • npm publish --access public

先发一个普通包,成功!!!🎉 【私有NPM的超级英雄!】为什么你需要Verdaccio来拯救你的开发流程?🦸‍♂️你是否曾经遇到过这样的问题? 🤔

再来一发scope包,泥马咋滴还失败了???

【私有NPM的超级英雄!】为什么你需要Verdaccio来拯救你的开发流程?🦸‍♂️你是否曾经遇到过这样的问题? 🤔

# 带@的scope包只能登录后发布 
    "@*/*": 
    # 访问包的权限 
    access: $all 
    # 发布包的权限 
    publish: $authenticated 
    # 代理链 
    proxy: npmjs npmmirror yarn

原来是之前设置了权限忘记了

ok那就npm adduser注册一个号吧

【私有NPM的超级英雄!】为什么你需要Verdaccio来拯救你的开发流程?🦸‍♂️你是否曾经遇到过这样的问题? 🤔 ps:坑点来了,直接npm adduser会报错

EACCES: permission denied, open '/verdaccio/conf/htpasswd'

经过多方百度发现需要在宿主机改一下 htpasswd 和storage文件的权限

sudo chown 10001:65533 htpasswd
sudo chown -R 10001:65533 storage

再次尝试发布scope

  • 先登录npm login

【私有NPM的超级英雄!】为什么你需要Verdaccio来拯救你的开发流程?🦸‍♂️你是否曾经遇到过这样的问题? 🤔 【私有NPM的超级英雄!】为什么你需要Verdaccio来拯救你的开发流程?🦸‍♂️你是否曾经遇到过这样的问题? 🤔 登录成功开始发包,只许成功不许失败

【私有NPM的超级英雄!】为什么你需要Verdaccio来拯救你的开发流程?🦸‍♂️你是否曾经遇到过这样的问题? 🤔

完结撒花!!!🎉🎉🎉

ps:Scoped PackageRegistry 设置

npm 默认会将 scoped package 发布到 npm 官方 registry,除非你为该 scope 单独配置了私有 registry

【私有NPM的超级英雄!】为什么你需要Verdaccio来拯救你的开发流程?🦸‍♂️你是否曾经遇到过这样的问题? 🤔

结语:Verdaccio,拯救你的开发世界!

如果你想让开发工作更流畅、更高效,Verdaccio绝对是不二选择!它不仅是你的npm缓存器、团队共享器,还是开发流程中的无名英雄。Verdaccio让你从繁杂的包管理中解放出来,专注于真正的代码工作。还等什么?赶紧安装Verdaccio,拥抱属于你的开发超级英雄吧!


最后附上我的两个包地址

eslint-config-rascal

@rascaljs/materials

转载自:https://juejin.cn/post/7411069750061924402
评论
请登录