为什么要搭建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
| 文件夹名 | 创建命令 | 描述 |
|---|---|---|
| storage | mkdir storage | 包缓冲目录 |
| htpasswd | mkdir htpasswd | 用户信息存储目录 |
| plugins | mkdir plugins | 插件目录 |
config.yaml | touch config.yaml | verdaccio 配置文件 |
serve.js | mkdir 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, 我们可以看到如下图就是成功了
