【私有NPM的超级英雄!】为什么你需要Verdaccio来拯救你的开发流程?🦸♂️你是否曾经遇到过这样的问题? 🤔
你是否曾经遇到过这样的问题? 🤔
刚刚安装好一大堆 npm 包,结果网络突然掉线了!你顿时感到开发流程被卡住了,焦虑不已。别担心,Verdaccio
来了,它就是你开发中的 "超级英雄"!让我们用一种轻松有趣的方式来聊聊 Verdaccio
为什么会成为你开发中的最佳伴侣。 🚀
Verdaccio 是什么? 🌟
Verdaccio 简直就像开发团队的“私人储物柜”,它是一个私有的 npm 代理服务器,让你可以把所有的 npm 包——无论是公开的还是私有的——都妥善收藏起来。还记得那种努力找东西但家里乱成一团的感觉吗?Verdaccio 就像是帮你把 npm 包都整齐分类的好帮手! 🗂️
为什么需要 Verdaccio?——理由妙不可言!(对比 Nexus) ⚖️
-
缓存有道,告别断网烦恼! 🛡️
- Verdaccio:有了 Verdaccio,本地缓存可以保存你下载过的 npm 包。即使在网络不稳定或者断网的情况下,你依然可以继续进行开发,根本不用担心 npm 包安装失败的问题。💪
- Nexus:同样提供缓存功能,但 Nexus 的设置相对复杂,特别是它支持多种包管理系统(如 Maven、NuGet、Docker 等),对于仅需要 npm 支持的小团队来说,这可能有些过重。⚙️
-
团队共享,效率翻倍! 🤝
- Verdaccio:它完美支持团队内部共享自定义 npm 包。你可以把私有包安全地存储在公司内部,而不需要暴露在公共 npm 上,确保团队成员快速高效地共享资源。🚀
- Nexus:尽管 Nexus 也提供类似的共享功能,但它更适合管理多类型包的场景。如果团队只需管理 npm 包,Verdaccio 更简单高效。👌
-
安全升级,依赖更放心! 🔒
- Verdaccio:Verdaccio 为你的 npm 依赖提供了简洁有效的权限管理,支持私有包的访问控制,轻松保证开发环境的安全性。🔐
- Nexus:在安全性方面,Nexus 的功能更为全面,它提供了细粒度的权限管理和审计功能,适合对安全要求极高的大型企业团队。🏢
-
简易安装,秒变 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 配置文件
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.编写Verdaccio
的config.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了。
手已按捺不住,心跳加速中,赶紧发两个包试试看!
- 把私服地址 配置到项目的
.npmrc
npm publish --access public
先发一个普通包,成功!!!🎉
再来一发scope
包,泥马咋滴还失败了???
# 带@的scope包只能登录后发布
"@*/*":
# 访问包的权限
access: $all
# 发布包的权限
publish: $authenticated
# 代理链
proxy: npmjs npmmirror yarn
原来是之前设置了权限忘记了
ok那就npm adduser
注册一个号吧
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
登录成功开始发包,只许成功不许失败
完结撒花!!!🎉🎉🎉
ps:Scoped Package
的 Registry
设置
npm
默认会将scoped package
发布到npm
官方registry
,除非你为该scope
单独配置了私有registry
。
结语:Verdaccio,拯救你的开发世界!
如果你想让开发工作更流畅、更高效,Verdaccio绝对是不二选择!它不仅是你的npm缓存器、团队共享器,还是开发流程中的无名英雄。Verdaccio让你从繁杂的包管理中解放出来,专注于真正的代码工作。还等什么?赶紧安装Verdaccio,拥抱属于你的开发超级英雄吧!
最后附上我的两个包地址
转载自:https://juejin.cn/post/7411069750061924402