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,按照你想用的模块规范输出包

  • 安装包

相关推荐
用户73087011793081 小时前
Vue中集成文字转语音:使用Web Speech API实现功能
前端
李重楼1 小时前
前端性能优化之 HTTP/2 多路复用
前端·面试
yanessa_yu1 小时前
全屏滚动网站PC端自适应方案
前端
RoyLin1 小时前
TypeScript设计模式:桥接模式
前端·后端·typescript
火星开发者2 小时前
Vue中实现Word、Excel、PDF预览的详细步骤
前端
brzhang2 小时前
干翻 Docker?WebAssembly 3.0 的野心,远不止浏览器,来一起看看吧
前端·后端·架构
lecepin3 小时前
AI Coding 资讯 2025-09-17
前端·javascript·面试
IT_陈寒3 小时前
React 18实战:7个被低估的Hooks技巧让你的开发效率提升50%
前端·人工智能·后端
树上有只程序猿3 小时前
终于有人把数据库讲明白了
前端