npm私有库创建(docker+verdaccio)

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:4873http://127.0.0.1:4873,访问成功就可以

使用**docker**镜像安装
  • 安装docker,此处采用docker-compose方式

首先,创建/opt/verdaccio目录,以下在该目录下操作

其次,分别创建conf storage plugins目录,并在conf目录下添加verdaccioconfig.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文件,此文件修改会映射到容器对应的文件

  • 限制用户

为保证只有一个用户访问,在authhtpasswd设置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,按照你想用的模块规范输出包

  • 安装包

相关推荐
木斯佳3 分钟前
前端八股文面经大全:26届秋招滴滴校招前端一面面经-事件循环题解析
前端·状态模式
光影少年23 分钟前
react状态管理都有哪些及优缺点和应用场景
前端·react.js·前端框架
JY.yuyu2 小时前
Docker常用命令——数据卷管理 / 端口映射 / 容器互联
运维·docker·容器
saber_andlibert2 小时前
TCMalloc底层实现
java·前端·网络
逍遥德2 小时前
如何学编程之01.理论篇.如何通过阅读代码来提高自己的编程能力?
前端·后端·程序人生·重构·软件构建·代码规范
冻感糕人~2 小时前
【珍藏必备】ReAct框架实战指南:从零开始构建AI智能体,让大模型学会思考与行动
java·前端·人工智能·react.js·大模型·就业·大模型学习
程序员agions2 小时前
2026年,“配置工程师“终于死绝了
前端·程序人生
alice--小文子2 小时前
cursor-mcp工具使用
java·服务器·前端
晚霞的不甘2 小时前
揭秘 CANN 内存管理:如何让大模型在小设备上“轻装上阵”?
前端·数据库·经验分享·flutter·3d
lpruoyu2 小时前
【Docker进阶-06】docker-compose & docker swarm
运维·docker·容器