使用verdaccio搭建自己的npm私服

220 阅读2分钟

为什么要搭建npm私服

随着公司业务逐渐变多,每个系统都沉淀出了一些组件包,其中有些组件包是不能发布到外网的、也为了方便管理我们的组件包,我们有必要搭建一个npm私服

安装最低要求

Node.js v12 或更高.

第一步 安装依赖包

安装verdaccio

npm install -g verdaccio
或
yarn global add verdaccio
或
pnpm add -g verdaccio

安装pm2

npm install -g pm2
或
yarn global add pm2
或
pnpm add -g pm2

第二步配置 verdaccio 运行目录

我们先创建一个存放verdaccio的文件夹

mkdir npm

我们依次在npm文件夹下再创建storage plugins config.yaml serve.js htpasswd

文件夹名创建命令描述
storagemkdir storage包缓冲目录
htpasswdmkdir htpasswd用户信息存储目录
pluginsmkdir plugins插件目录
config.yamltouch config.yamlverdaccio 配置文件
serve.jsmkdir serve.js配合pm2启动verdaccio用

config.yaml 文件

# #号后面是注释
# 所有包的缓存目录
storage: ./storage
# 插件目录
plugins: ./plugins

#开启web 服务,能够通过web 访问
web:
  # WebUI is enabled as default, if you want disable it, just uncomment this line
  #enable: false
  title: 不粘锅的NPM私服
#验证信息
auth:
  htpasswd:
    #  用户信息存储目录
    file: ./htpasswd
    # Maximum amount of users allowed to register, defaults to "+inf".
    # You can set this to -1 to disable registration.
    #max_users: 1000

# a list of other known repositories we can talk to
#公有仓库配置
uplinks:
  npmjs:
    url: https://registry.npmjs.org/

packages:
  '@*/*':
    # scoped packages
    access: $all
    publish: $authenticated

    #代理 表示没有的仓库会去这个npmjs 里面去找 ,
    #npmjs 又指向  https://registry.npmjs.org/ ,就是上面的 uplinks 配置
    proxy: npmjs

  '**':
    # 三种身份,所有人,匿名用户,认证(登陆)用户
    # "$all", "$anonymous", "$authenticated"

    #是否可访问所需要的权限
    access: $all

    #发布package 的权限
    publish: $authenticated

    # 如果package 不存在,就向代理的上游服务发起请求
    proxy: npmjs

# To use `npm audit` uncomment the following section
middlewares:
  audit:
    enabled: true
# 监听的端口 ,重点, 不配置这个,只能本机能访问
listen: 0.0.0.0:4873
# 允许离线发布
publish:
  allow_offline: true
# log settings
logs:
  - {type: stdout, format: pretty, level: http}
  #- {type: file, path: verdaccio.log, level: info}

serve.js文件内容 这里我们通过子进程来启动verdaccio

const exec  = require('child_process').exec


exec(`verdaccio --config ./config.yaml`, (err, stdout, stderr) => {

  console.log(
    `
    exec error: ${ err }
    \r\n
    ----------
    \r\n
  `)

})

运行verdaccio

在这里我们主要依赖pm2来对verdaccio服务进行管理

这里大家可能会有疑惑, 我们不可以直接启动verdaccio么?

我们可以通过运行 verdaccio --config ./config.yaml 来直接启动服务

为什么要用pm2来管理?

主要是方便我们管理verdaccio服务,当然也有别的管理方式,这里我就以为pm2来做示例

首先切换到我们刚才创建的npm/目录下,先添加一个PM2任务

pm2 start ./serve.js --name="npm私服"

我们回车后这个任务就默认会启动起来

由于我们已经添加过一次pm2任务,后续再操作这个任务可以通过以下命令来管理

pm2 start npm私服
pm2 stop  npm私服

访问verdaccio服务

访问http://10.2.1.1:2348, 我们可以看到如下图就是成功了

image转存失败,建议直接上传图片文件

参考文档

Verdaccio官网文档 PM2官网文档