组件库私服-前端私服-通过docker部署verdaccio-只支持npm pnpm yarn包
1. 说明
verdaccio 6.x需要比较新的docker版本才能启动
verdaccio 5.x支持比较老的docker版本(比如2017年发布的1.13.1版本)
2. 制作verdaccio镜像
通过第三方docker代理网站下载镜像
更多docker代理地址见 《缓存-redis stack-在centos 7 安装redis stack-yum方案-docker代理方案-最全docker代理地址-含docker导入导出》
高版本docker专用(实际会下载verdaccio 6.7.1版本)
docker pull docker-0.unsee.tech/verdaccio/verdaccio:latest
docker pull docker.1ms.run/verdaccio/verdaccio:latest
低版本docker(V1.13.1)专用
docker pull docker-0.unsee.tech/verdaccio/verdaccio:5.28.0
查看最近版本的版本号
docker inspect docker-0.unsee.tech/verdaccio/verdaccio:latest | grep -i version
docker inspect docker.1ms.run/verdaccio/verdaccio:latest | grep -i version
"DockerVersion": "",
"NODE_VERSION=24.15.0",
"YARN_VERSION=1.22.22",
"org.opencontainers.image.version": "6.7.1"
制作明确版本号的镜像并导出
docker tag docker.1ms.run/verdaccio/verdaccio:latest verdaccio:6.7.1
docker save verdaccio:6.7.1 -o /home/docker/verdaccio-6.7.1.jar
下载镜像(xshell软件专用)
sz /home/docker/verdaccio-6.7.1.jar
备份位置:
D:\办公\入职软件-一般可以放在公司的电脑上备份\软件\0-港能文件\verdaccio-前端mpn仓库私服 及 服务器:/j-deploy/packages/docker-image-verdaccio-前端私服-后期需要备份
删除镜像(可选):
docker rmi docker-0.unsee.tech/verdaccio/verdaccio
docker rmi docker.1ms.run/verdaccio/verdaccio:latest
3. 导入verdaccio镜像并启动容器
导入镜像
docker load < verdaccio-6.7.1.jar
创建存放数据的文件夹 (配置、npm 包存储、verdaccio插件)
mkdir -p /home/docker/verdaccio/{conf,storage,plugins}
写入配置
verdaccio 默认同版本号禁止覆盖,修改2个publish: \$authenticated为 overwrite 可覆盖,注意配置如果存在重复,就有cannot open config file /verdaccio/conf/config.yaml: false,有问题,又会提示 a package version that is forbidden by your security policy, or
npm ERR! 403 on a server you do not have access to. ,还是用 --force 参数吧
cat > /home/docker/verdaccio/conf/config.yaml << EOF
storage: /verdaccio/storage
plugins: /verdaccio/plugins
web:
title: Verdaccio
auth:
htpasswd:
file: /verdaccio/conf/htpasswd
algorithm: bcrypt
uplinks:
npmjs:
url: https://registry.npmmirror.com/
packages:
'@*/*':
access: \$all
publish: \$authenticated
unpublish: \$authenticated
proxy: npmjs
'**':
access: \$all
publish: \$authenticated
unpublish: \$authenticated
proxy: npmjs
server:
port: 4873
host: 0.0.0.0
middlewares:
audit:
enabled: true
log:
- {type: stdout, format: pretty, level: http}
EOF
查看配置并授权
cat /home/docker/verdaccio/conf/config.yaml
chown -R root:root /home/docker/verdaccio
启动容器
删除容器(可选)
docker stop verdaccio && docker rm verdaccio
#不加--user root实际上传会失败,加了日志启动会有一条警告
docker run -d \
--name verdaccio \
-p 0.0.0.0:4873:4873 \
-v /home/docker/verdaccio/conf:/verdaccio/conf \
-v /home/docker/verdaccio/storage:/verdaccio/storage \
-v /home/docker/verdaccio/plugins:/verdaccio/plugins \
--user root \
--log-driver json-file \
--log-opt max-size=10m \
--log-opt max-file=3 \
verdaccio:6.7.1 #高版本docker专用
verdaccio:5.28.0 #低版本docker专用
#相关常用脚本
docker restart verdaccio #只改配置可以直接重启
docker ps -a | grep verdaccio
docker logs -f verdaccio
docker exec -it verdaccio sh
相关页面及测试
http://192.168.1.10:4873
#如果这个都提示有错误,说明启动失败,是verdaccio版本比docker版本高
wget http://127.0.0.1:4873
telnet 192.168.1.10 4873
4. 发布组件到私服
先准备好《共用前端测试工程.md》组件库
# 1. 设置 registry 为你的私服
npm config set registry http://192.168.1.10:4873
# 2. 登录私服
# 这是注册并登录 jiangjiesheng/123456
npm adduser --registry http://192.168.1.10:4873
# 单登录
npm login --registry http://192.168.1.10:4873
# 3. 发布组件
# 发布成功后,浏览器刷新 http://192.168.1.10:4873 就能看到组件
npm publish
# 覆盖冲突版本:
pnpm unpublish @gn-team/my-button@1.0.0 --force
pnpm unpublish @gn-team/my-button@1.0.0 --force --registry http://192.168.1.10:4873
pnpm publish
5. 从私服下载组件和代理公网组件
先准备好《共用前端测试工程.md》
设置或切换仓库源
# 0. 本地清理缓存
npm config delete registry
npm config delete //192.168.1.10:8081/repository/npm-hosted/:_authToken
npm config delete //192.168.1.10:8081/repository/npm-hosted/:_authToken
npm cache clean --force
# 1. 切换到 Nexus 私服地址
npm config set registry http://192.168.1.10:8081/repository/npm-group/
# 2. 登录
npm login --registry http://192.168.1.10:8081/repository/npm-hosted/ 临时
admin/admin123
# 3. 发布
npm publish --registry http://192.168.1.10:8081/repository/npm-hosted/ 临时
# 4.页面查看
http://192.168.1.10:8081/repository/npm-group/
http://192.168.1.10:8081/repository/npm-hosted/
如果涉及到切换仓库源,需要清理本地缓存:
尤其是Verdaccio,如果Verdaccio通过先unpublish,再publish发布同一个版本时,调用方需要先清理缓存,(Nexus因为后台仔细设置覆盖,所以不用手动执行更新):
pnpm store prune (可以后期可以测试部执行可行)
if (Test-Path node_modules/.vite ) { Remove-Item -Force -Recurse node_modules/.vite }
或
在启动脚本加 --force 【**关键,否则即使node_modules下的组件是最新的,但是最终启动还是使用老的包**】
"scripts": {
"dev": "vite --force",
"build": "vite build",
"preview": "vite preview"
},
pnpm remove @gn-team/my-button
pnpm install @gn-team/my-button --no-cache
pnpm install @gn-team/my-button --registry http://192.168.1.10:4873 --no-cache
测试安装公共组件(会经过私服代理)
npm install axios element-plus
整体安装package.json依赖
pnpm install
恢复官方 npm 源(根据需要)
npm config set registry https://registry.npmmirror.com
启动调试
npm run dev
You are using Node.js 20.10.0. Vite requires Node.js version 20.19+ or 22.12+. Please upgrade your Node.js version.
if (Test-Path package-lock.json) { Remove-Item -Force package-lock.json }
if (Test-Path pnpm-lock.yaml) { Remove-Item -Force pnpm-lock.yaml }
if (Test-Path yarn.lock) { Remove-Item -Force yarn.lock }
if (Test-Path node_modules) { Remove-Item -Recurse -Force node_modules }
pnpm install vite@5.4.10 @vitejs/plugin-vue@4.6.2 --save-dev
pnpm install
pnpm run dev
访问:
http://localhost:5173/
正文到此结束