基于 Node.js 的轻量级私有仓库 Verdaccio
2023-04-17
1502 字约 6 分钟
...Verdaccio
一、简介
1. 什么是 Verdaccio
“一个基于 Node.js 的轻量级私有仓库”。 平时使用 npm publish 进行发布时,上传的仓库默认地址是 npm,通过 Verdaccio 工具在本地新建一个仓库地址,再把本地的默认上传仓库地址切换到本地仓库地址即可。当 npm install 时没有找到本地的仓库,则 Verdaccio 默认配置中会从 npm 中央仓库下载。
注:Verdaccio 表示意大利中世纪晚期 fresco 绘画中流行的一种绿色的意思。
2. 优点
- 私密性高,仅团队共享。
- 安全性高,能够有效的防治恶意代码攻击。
- 使用局域网,传输速度快。
3. 官网
二、准备环境
1. NPM
包管理工具
- 常用命令
| 命令 | 描述 |
|---|---|
| npm who am i | 查看当前用户 |
| npm config list | 查看源地址 |
| npm set registry url | 切换源地址 |
| npm config rm registry | 删除源地址 |
| npm login | 登录 |
| npm publish | 发布 |
| npm unpublish 包名 | 撤销发布 |
2. NRM
npm 源管理工具(可以快速切换仓库源)
- 安装
# 全局安裝
npm install -g nrm
- 配置环境变量
在系统变量Path中配置 nodejs的全局安装路径

- 常用命令
| 命令 | 描述 |
|---|---|
| nrm ls | 查看源地址 |
| nrm add registry url | 添加源地址 |
| nrm use registry | 切换源地址 |
| nrm current | 查看当前源地址 |
| nrm del registry | 删除源地址 |
3. PM2
进程管理 重启策略 日志 持久化 集群模式 静态服务 应用部署 监控 ...
- 官网
- 介绍
PM2 是一个守护进程管理工具,帮助您管理和守护您的应用程序。它以简单直观的 CLI 命令行方式进行工作。
- 安装
# 全局安裝
npm install pm2@latest -g
yarn global add pm2
复制代码
- 常用命令
| 命令 | 描述 |
|---|---|
| pm2 ls | 查看进程 |
| pm2 start [app.js] | 启动某个应用 |
| pm2 stop [appName/ID] | 停止某个应用(进程名/ID) |
| pm2 restart [app.js] | 重启某个应用 |
| pm2 describe [appName] | 查看某个进程的具体情况 |
| pm2 logs [appName/ID] | 查看应用日志(进程名/ID) |
| pm2 delete [appName/ID] | 删除进程(进程名/ID) |
| pm2 stop all | 停止所有应用 |
| pm2 restart all | 重启所有应用 |
| pm2 logs | 查看实时日志 |
| pm2 logs all | 查看所有日志 |
| pm2 delete all | 删除所有进程 |
- 通过 PM2 启动 Verdaccio
# 以管理员身份打开 cmd
# 1.直接执行,启动失败
pm2 start verdaccio
# 2.输出日志,查看报错信息
pm2 logs
# 3.正确的 pm2 执行应该拼上 verdaccio 包所在的路径
# D:\Nvm\v16.17.0\node_global\node_modules\verdaccio\bin\verdaccio
pm2 start D:\Nvm\v16.17.0\node_global\node_modules\verdaccio\bin\verdaccio
复制代码
注:直接运行会启动失败,可输出日志查看,是因为要执行的 verdaccio 包未找到
注:pm2 start 后面拼上 verdaccio 包的路径,启动成功,可以访问 http://localhost:4873/
三、安装与运行
1. 安装
# 全局安装
# 本地环境 node-16.17.0 npm-8.15.0
npm install -g verdaccio
复制代码
2. 运行
# 直接使用 verdaccio 命令运行 (不建议)
verdaccio
# 使用 pm2 运行 (建议使用pm2托管)
pm2 start verdaccio
复制代码
- 在路径
C: \Users \Lemon \AppData\Roaming\verdaccio\下生成默认的配置文件 config.yaml
- 默认页面地址:
http://localhost:4873/
- 配置
config.yaml文件后,可以通过http://192.168.3.7:4873/访问页面
四、配置流程
1. 添加源地址
# 查看可选源,* 代表正在使用的源
nrm ls
# 添加一个私有 npm 源,'localhost' 为自定义的源地址名称
nrm add localhost http://localhost:4873/
复制代码
2. 使用源地址
# 'localhost' 为添加源时定义的源地址名称
nrm use localhost
复制代码

3. 添加用户
# 添加 npm 用户前,需要先启动 verdaccio 服务
npm adduser --registry http://localhost:4873/
复制代码
注:密码不能少于8位
五、发布与下载
1. 包


- package.json 配置
{
// 包名
"name" : "@its/log" ,
// 包的版本号
"version" : "1.0.0",
// 包的描述信息
"description":"私有包",
// 入口文件
"main" : "index.ts",
// 以 ES Module(也就是 ES6)模块化方式进行加载:因为早期没有 ES6 模块化方案时,都是遵循 CommonJS 规范,而 CommonJS 规范的包是以 main 的方式表示入口文件的;为了区分就新增了 module 方式,但是 ES6 模块化方案效率更高,所以会优先查看是否有 module 字段,没有才使用 main 字段。
"module": "index.ts",
// 执行 npm 脚本命令简写
"scripts": {
"test" : "echo \ "Error: no test specified\ " && exit 1"
},
// 关键词
"keywords" : [ "npm " ,"package" ] ,
// 可以配置要上传 npm 的文件白名单目录
"files" : {
"dist"
},
// 开发环境下,项目所需的依赖
"dependencies" : {},
// 生产环境下,项目所需的依赖
"devDependencies" : {},
// 作者
"author" : "wyw" ,
// 开源许可协议:BSD ISC MIT ...
"license" :"MIT",
// 代码仓库地址
"repository": {
"type": "git",
"url": ""
},
}
复制代码
2. 登录
# 登录
npm login
# 验证是否登录成功,登录成功后会显示用户名
npm who i am
复制代码

3. 发布
# 发布前,需要先切换到要上传的包报所在的目录
npm publish
复制代码


4. 下载
# '@its/log' 为上传包的包名
npm install @its/log --save
复制代码


如果您觉得这篇文章有帮助,请点个赞吧~
相关文章
更多文章 →前端2026-07-17
HTML Form 可以把 POST 响应加载进 iframe
在接入支付验证、身份认证或第三方授权页面时,我们经常会遇到这样的流程: 1. 后端返回一个第三方接口地址。 2. 这个地址必须通过 请求访问。 3. 接口返回 HTML,或者重定向到真正的验证页面。 4. 验证页面需要嵌入当前网站,而不是打开新标签页。 5. 验证完成后,当前页面继续执行后续业务。 第一次遇到这个需求,很容易想到: 但涉及第三方支付时,这种方式通常会遇到 CORS、Cookie、重定向和跨域页面读取限制。 实际上,HTM...
学习
前端2026-05-29
前端判断一个网页是否允许被 iframe 内嵌
前端 不能 100% 准确提前判断 一个网页是否允许被 iframe 内嵌,因为决定权主要在目标网站返回的 HTTP 响应头 里,而普通前端 JS 通常读不到跨域页面的响应头。 核心判断看这两个东西: 1. 老一点但仍常见。 表示完全不允许被 iframe 嵌入。 表示只允许同源页面 iframe 嵌入。 以前有这个,但现代浏览器支持很差,基本不建议依赖。 2. 现在更推荐看这个。 表示不允许任何页面嵌入。 表示只允许同源嵌入。 表示只...
学习
前端2026-03-20
网页唤起 Android App 调试笔记(App Links)
在最近的项目中,我遇到了 网页访问特定 URL 应该唤起 Android App,但实际只打开网页 的问题。通过调试和排查,整理出以下经验和步骤。 1\. 项目与环境信息(脱敏处理) 网站域名: 唤起页面: Android App 包名: intent filter 配置示例: assetlinks.json 已上线,包含 App 的 SHA256 签名指纹 2\. 问题现象 用户访问 页面时, 网页打开了,但 App 没...
学习
前端2026-03-02
深入理解 Cookie:安全属性、访问边界与渲染场景实践
本文系统梳理 Cookie 核心机制,聚焦 HttpOnly/SameSite 等安全属性 、 访问权限边界 、 CSR/SSR 差异 ,附关键代码示例与安全清单。适合开发查阅与知识沉淀。 一、Cookie 是什么?为什么需要它? HTTP 是无状态协议。Cookie 是服务端通过 响应头下发、浏览器自动存储并在后续 同源请求中携带 的小型文本数据(通常 ≤4KB),用于: 会话维持(Session ID) 用户偏好(语言/主题) 跨请...
学习
前端2026-03-02
退出登录时 Cookie 清除指南
核心结论 :登出 ≠ 单方面操作。HttpOnly 与非 HttpOnly Cookie 需 前后端协同清除 ,缺一不可。残留 Cookie = 安全隐患 + 用户体验漏洞。 🔒 为什么不能“一键清空”? 浏览器出于安全设计: 后端 :只能通过 响应头清除 自己设置过 的 Cookie(需属性完全匹配) 前端 JS :可读写非 HttpOnly Cookie,但 无法触碰 HttpOnly Cookie 无“清除全部”API :任何服...
学习
前端2025-12-15
懒加载图片在同一个 Item 中逐个出现的原因与解决方案
懒加载图片在同一个 Item 中逐个出现的原因与解决方案 适用场景 :使用原生 实现图片懒加载的动态列表,每个列表项(item)包含多张图片。 📌 问题描述 在开发一个动态渲染的列表时,每个 item 中包含三张图片,并使用 HTML 原生的懒加载属性: 观察到的现象: 开启懒加载时 :三张图片 不是同时出现 ,而是 从左到右(或从上到下)依次加载显示 ,有明显的时间差。 关闭懒加载(移除 )后 :三张图片 看起来是一起出现的 ,视觉...
学习
评论
请登录后发表评论
去登录