npm私有仓库
前言
私有仓库主要用于托管企业内部不公开的组件或代码库,以实现代码安全隔离和知识产权保护,同时能通过缓存机制显著提升包的下载速度,并通过权限管理加强内部依赖包的版本控制,从而提高团队开发效率和项目可靠性
主要作用与好处
-
安全性与隐私保护:
-
托管企业内部研发的、不希望公开的私有组件、工具库或sdk,防止核心技术和商业秘密泄露。
-
只对特定用户或团队可见,保护知识产权。
-
-
提升开发效率:
-
通过缓存公共仓库的依赖包,内网下载速度更快,减少对公共npm仓库的依赖和网络不稳定性。
-
方便管理和复用公司内部的共享组件、通用模块和配置文件,减少重复开发工作。
-
-
版本管理与控制:
-
通过权限管理,细化对npm包的下载和发布控制。
-
提供一个集中的容器来统一管理所需的包和版本,确保版本的一致性。
-
-
加速构建与集成:
-
缓存预编译的工具包,用于加速CI/CD流程,避免每次构建都从头安装和编译。
-
通过代理公共仓库,可以对第三方包进行安全审计和筛选。
-
-
促进技术沉淀与复用:
- 鼓励公司内部技术和知识的积累与沉淀,将常用的业务模块或组件集中管理,方便日后维护和引用。
如何快速搭建一个私有仓库
Verdaccio
Verdaccio 是==一款基于Node.js 构建的轻量级、零配置的私有npm 注册中心解决方案==,可用于在本地或团队内部搭建和管理npm 包仓库。它支持缓存公共包,发布私有包,并提供用户认证和权限管理。此外,Verdaccio 具有代理和缓存功能,能连接上游注册中心(如npmjs.org),并可通过插件扩展存储方案,如对接S3 等云服务。
创建流程
使用**npm/yarn/pnpm**
创建
-
Node.js v12+
-
全局安装
powershell
npm install -g verdaccio
yarn global add verdaccio
pnpm global add verdaccio
- 启动
powershell
verdaccio
或者使用pm2 start verdaccio
使用浏览器访问web服务,端口号4873,http://0.0.0.0:4873
或http://127.0.0.1:4873
,访问成功就可以

使用**docker**
镜像安装
- 安装
docker
,此处采用docker-compose
方式
首先,创建/opt/verdaccio
目录,以下在该目录下操作
其次,分别创建conf
storage
plugins
目录,并在conf
目录下添加verdaccio
的config.yaml
配置文件
接着,创建docker-compose.yml
文件,文件配置如下
typescript
services:
verdaccio:
image: verdaccio/verdaccio
container_name: verdaccio
environment:
- VERDACCIO_PORT=4873
restart: always
ports:
- "4873:4873"
volumes:
- /opt/verdaccio/storage:/verdaccio/storage
- /opt/verdaccio/config:/verdaccio/config
- /opt/verdaccio/plugins:/verdaccio/plugins
使用docker-compose up -d
启动,-d
表示在后台运行
启动成功后通过docker ps -a
查看正在运行的容器状态

- 开启防火墙4873端口 (如在自己电脑本地运行就不用看这一步了)

如果你是用的ufw
,则使用ufw
打开tcp/4873
即可
配置好端口后,访问即可

配置文件
在/opt/verdaccio/conf
下创建config.yaml
文件,此文件修改会映射到容器对应的文件
- 限制用户
为保证只有一个用户访问,在auth
的htpasswd
设置max_users: -1
以下为config.yaml
配置文件
powershell
storage: /verdaccio/storage
auth:
htpasswd:
file: /verdaccio/storage/htpasswd #用户登录密码
max_users: -1 #只能有一个用户
uplinks:
npmjs:
url: https://registry.npmjs.org/
packages:
'@*/*':
access: $authenticated
publish: $authenticated
proxy: npmjs
'**':
access: $all
publish: $authenticated
proxy: npmjs
middlewares:
audit:
enabled: true
logs:
- { type: stdout, format: pretty, level: http }
users:
admin: #用户名
groups: admin #分组权限
- 创建
htpasswd
文件
在主机上运行
powershell
# 安装 htpasswd 工具(Debian/Ubuntu)
sudo apt-get install apache2-utils -y
# 在 /opt/verdaccio/storage/ 下生成 htpasswd 文件
htpasswd -Bbn admin admin123 > /opt/verdaccio/storage/htpasswd
这里生成的用户是:
-
用户名:
admin
-
密码:
admin123
(可以自己换)
-B
表示使用 bcrypt 加密,这是 Verdaccio 推荐的。
发布一个包
有了私有库之后,就可以在上面发布一个包
在这之前需要我们登录私有库账号
- 登录私有仓库
powershell
npm login --registry http://xxx:4873 #这里改为你自己的私有仓库地址
以下是登录成功/失败的截图


-
发布包
现在一般都是用lerna来对包集合统一管理,如果你不想用CJS,可以引入rollup,按照你想用的模块规范输出包
-
安装包