Skip to main content

verdaccio

在公司项目开发中,我们经常会有相同的业务逻辑或者组件可以复用;但是这些由于安全性,我们又希望将这些代码在内部项目中使用,并不希望公开访问;verdaccio 提供了一个搭建 npm 私有服务器的方式,我们来看下如何搭建以及上传我们自己的依赖包。

介绍及安装

Verdaccio 是什么?

Verdaccio 是一个 Node.js 创建的轻量的私有 npm 代理注册源(proxy registry)

通过 Verdaccio 搭建私有 npm 服务器有着以下优势:

  • 零配置:无需安装数据库,基于 nodejs,安装及运行。
  • 使用方便:将内部高复用的代码进行提取,方便在多个项目中引用。
  • 安全性:仓库搭建在局域网内部,只针对内部人员使用。
  • 权限管理:对发布和下载 npm 包配置权限管理。
  • 加速包下载:将下载过的依赖包进行缓存,再次下载加快下载速度。

首先进行全局安装:

# 全局安装

npm install -g verdaccio

# 启动服务器

verdaccio

安装后直接输入命令即可运行:

config.yaml 是配置文件的路径,我们可以进行权限等配置;4873 是 Verdaccio 启动的默认端口,支持在配置文件中进行修改;我们再浏览器中打开 localhost:4873 就能看到他的管理界面了:

通过命令行启动的话,如果终端停止了,那我们的服务器也就停止了,因此一般我们通过 pm2 启动守护进程。

npm install -g pm2
pm2 start verdaccio
pm2 list

这样 verdaccio 就在后台运行了。

如果不想使用,可以停止或者删除进程

pm2 stop verdaccio

pm2 delete verdaccio

除此之外,我们还可以通过 docker 来进行安装

docker run --name verdaccio -itd -v ~/docker/verdaccio:/verdaccio -p 4873:4873 verdaccio/verdaccio

nrm 管理镜像源地址

Verdaccio 安装好后,我们可以更改 npm 源为本地地址:

# 设置 npm 使用的源为本地私服

npm set registry http://localhost:4873/

或者针对某个依赖安装时选用自己的源地址:

npm install lodash --registry http://localhost:4873

但是如果我们想再次切换到淘宝或者其他的镜像地址,就不那么方便了;我们可以通过 nrm 这个工具来管理我们的源地址,可以查看和切换地址;首先还是进行安装:

npm install -g nrm

安装后我们可以通过 nrm add [name] [address]这个命令来新增一个源地址:

nrm add verdaccio http://localhost:4873/

使用 nrm ls 可以查看我们使用的所有源地址,带*是正在使用的地址;通过 nrm use [name]来切换地址:

* npm ---- https://registry.npmjs.org/
cnpm --- http://r.cnpmjs.org/
taobao - https://registry.npm.taobao.org/
nj ----- https://registry.nodejitsu.com/
rednpm - http://registry.mirror.cqupt.edu.cn/
npmMirror https://skimdb.npmjs.com/registry/
edunpm - http://registry.enpmjs.org/
verdaccio --- http://localhost:4873/

客户端镜像源切换为服务器地址

// nrm 查看 registry 地址列表
nrm ls
// nrm 切换 registry 地址
nrm use verdaccio
// nrm 删除 registry 地址
nrm del verdaccio

添加用户(已创建用户则跳过此步骤)

服务端npm adduser添加用户,客户端npm login登录用户。使用 nrm 切换镜像源为服务器地址

npm notice Log in on http://localhost:4873/
Username: xinjn
Password:123456
Email: 422075616@qq.com
Logged in as test on http://localhost:4873/.

然后使用服务端创建的用户登录,可以使用 npm who am i 查看当前用户

依赖包创建和发布

搭建好了 npm 私服,我们就可以上传 npm 包了,我们来创建一个最简单的 NPM 包项目,目录如下:

privative-npm
├── .gitignore // 相应目录,发布时会忽略上传
├── .npmignore // 同理,会忽略上传
├── index.js // 作为入口
├── package.json // 包描述文件
└── README.md // 项目说明

首先通过 npm init 初始化 package.json,然后我们可以对包的信息进行一些修改:

// package.json
{
"name": "gn-test", // 必需,不能有大写字母、空格、下划线
"version": "1.0.0", // 必需,请严格遵循语义化
"description": "Test only, not published to NPM.",
"author": "guniao",
"license": "MIT",
"type": "module",
"main": "./index.js"
}

一个 NPM 包,其中 name 和 version 是必需的,其他都可以省略,而且 name 不能与平台上已有包重名。

由于演示而已,我们就只导出一个方法吧。注意,若在 node 下运行此包,我们使用了 ESM,因此需要在 package.json 设置 “type”: “module”

// index.js
export default function log(str) {
console.log(str)
}

然后我们登录上面注册的用户,输入用户名、密码以及邮箱等:

# 登录账号

npm login

也可以通过 npm logout 退出登录,以及 npm who am i 查看当前登录的用户名。

登录成功后就可以将我们的包进行发布了,在创建的 npm 的包根目录下,打开 cmd 窗口,执行 npm publish,或可在 package.json 脚本命令中定义(后者更合适),以下是发布成功的界面

# 发布依赖包

> 先切换 npm 的镜像源到 私服地址,然后`npm login`登录,在进行后续操作

npm publish

使用依赖包

先切换 npm 的镜像源到 私服地址,然后npm login登录,在进行后续操作

当前 npm 的镜像源要是存放 npm 私服的地址,不然无法获取到自定义包。如果私服中没有要下载的包,会自动从外服中下载。

注意:不能在当前 npm 包下 测试!

// 下载
npm i gn-test
// vue 使用 npm 包
<template>
<div>111</div>
</template>

<script>
import gnTset from 'gn-test'
export default {
created() {
gnTset(111)
}
}
</script>

<style></style>

更新依赖包

先切换 npm 的镜像源到 私服地址,然后登录,在进行后续操作

如果我们要更新包,其中版本号 version 一定要修改,否则会更新失败,如下:

![](如果我们要更新包,其中版本号 version 一定要修改,否则会更新失败,如下:)

这里我就只改个版本号吧,更新包的命令仍然是 npm publish ,上传成功后,刷新页面可以看到新版本了。

删除依赖包

先切换 npm 的镜像源到 私服地址,然后npm login登录,在进行后续操作

# 撤销包的某个版本

$ npm unpublish [<@scope>/]<pkg>@<version>

# 撤销包

$ npm unpublish [<@scope>/]<pkg>

# 强制撤销

$ npm unpublish [<@scope>/]<pkg> --force

参考文章