verdaccio私有仓库搭建
搭建过程
安装node环境
下载最新的node环境,下载地址:https://nodejs.org/en/download/current/
wget https://npm.taobao.org/mirrors/node/v16.8.0/node-v16.8.0-linux-x64.tar.xz tar -xf node-v16.8.0-linux-x64.tar.xz mv node-v16.8.0-linux-x64 /usr/local/ #配置环境变量 echo 'export NODE_HOME=/usr/local/node-v16.8.0-linux-x64' >> /etc/profile echo 'export PATH=$PATH:$NODE_HOME/bin' >> /etc/profile echo 'export NODE_PATH=$NODE_HOME/lib/node_modules' >> /etc/profile source /etc/profile #查看版本 node -v
安装verdaccio
npm i -g verdaccio #查看帮助 verdaccio -h #直接启动 verdaccio
启动后会在启动目录下生成生文件,编辑配置文件添加 listen: 0.0.0.0:4873
vim verdaccio/config.yaml # 添加监听端口 listen: 0.0.0.0:4873
verdaccio 默认配置如下
cat verdaccio/config.yaml|grep -v "#"|grep -v "^$" listen: 0.0.0.0:4873 storage: ./storage plugins: ./plugins web: title: Verdaccio auth: htpasswd: file: ./htpasswd uplinks: npmjs: url: https://registry.npmjs.org/ packages: '@*/*': access: $all publish: $authenticated unpublish: $authenticated proxy: npmjs '**': access: $all publish: $authenticated unpublish: $authenticated proxy: npmjs server: keepAliveTimeout: 60 middlewares: audit: enabled: true logs: { type: stdout, format: pretty, level: http }
配置中参数介绍
storage
配置发布到私有仓库包的存放地址,默认存放verdaccio/storage中,可以定期将该文件的内容进行清理,但一定要谨慎,应为该文件存放的包不止我没自己发布的,还有一些重共有仓库中拉取并缓存的包。
uplink
也许,包不止发布到一个仓库,如果公司按照业务线划分了几个前端部门,部门之间的技术独立但能共享,这时如果想使用自己发布的npm私有包的同时,还期望可以使用其他团队开发的npm包,这时候就可以通过指定改参数实现,换句话说,npm公有仓库也可以理解为我们的另一个仓库,像这样的仓库还有淘宝的仓库等,配置如下,这里只是做了一个定义,真正的使用其实在包的packages管理参数中
uplink: npmjs: url: https://registry.npmjs.org taobao: url: https://registry.npm.taobao.org/
packages
该参数是整个配置文件中最重要的一个,因为通过该配置参数,能达到包设定权限,设定该包的发布和使用权限,设置该包是否代理到公有仓库等。
packages: '@boluome/*': access: $all publish: $authenticated unpublish: $authenticated '**': access: $all publish: $authenticated unpublish: $authenticated proxy: npmjs
通过以上的参数配置,就约定了,如果你发布的包是 @boluome 前缀的那就表明是私有包,不会代理到外部。 如果发布的包没有 @boluome 前缀,这会走 ** 的逻辑,即前缀不包含 @boluome 的包。 proxy: npmjs 指明了如果该报上传则会被代理到npm公有仓库中,如果下载某一个不包含 @boluome 前缀的包时,会自动代理到npm公有仓库查找资源并下载,并且会默认拉取的资源缓存到 storage 文件中。
-
web 界面相关的配置
-
auth 用户相关,例如注册、鉴权插件(默认使用的是 htpasswd)
-
server 私有库服务端相关的配置
-
middlewares 中间件相关配置,默认会引入 auit 中间件,来支持 npm audit 命令
-
logs 终端输出的信息的配置
权限
权限指的是我们需要私有 npm 库上发布的包只能团队成员查看。需要做这 2 件事:
-
限制 npm 包的查看,只能为已注册的用户
-
禁止用户注册(注册完成后)
# 默认配置 packages: '@*/*': access: $all publish: $authenticated unpublish: $authenticated proxy: npmjs '**': access: $all publish: $authenticated unpublish: $authenticated proxy: npmjs
它有三个可选值 $all(所有人)、$anonymous(未注册用户)、$authenticated(注册用户)
- access 控制包的访问权限
- publish 控制包的发布权限
- unpublish 控制包的删除权限
设置好 packages 后,还得更改 auth 的值,因为此时注册用户是没有限制的,也就是说如果你的私有 npm 库部署在外网环境的话,任何人都可以通过 npm adduser 命令注册用户.
这里需要设置 auth 的 max_users 为 -1,它代表的是禁用注册用户
auth: max_user: -1 # 需要要开启用户注册,设置指定数字(大于 0)即可
当出现下面问题错误的时候,说明你的npm包太大,超过限制
413 Payload Too Large - PUT http://xxx- request entity too large
max_body_size: 100mb
使用pm2启动verdaccio
npm i -g pm2 pm2 start `which verdaccio` pm2 startup pm2 save