搭建npm私有源仓库

666 阅读3分钟

npm 私有源仓库

因为涉及公司业务或其他种种原因,我们开发的内部包不能发布到 NPM 平台,我们可以在公司内部建立一个的私有的 NPM 平台内部访问使用

nexus 搭建

设置账户密码 账号*****

密码*****

地址http://****:8081/

创建 npm 管理角色

2025-02-07-19-05-20-image.png 2025-02-07-18-15-58-image.png

添加用户

2025-02-07-19-06-40-image.png

2025-02-07-19-08-57-image.png

创建 blob 存储

2025-02-07-19-17-04-image.png

2025-02-07-19-18-28-image.png

创建npm仓库

  1. 选择左侧Repositories,点击Create repository选择要创建的仓库类型

2025-02-07-19-24-56-image.png

  1. 创建 proxy 类型的 npm 仓库
  • name:proxy-npm

  • proxy:镜像代理地址

  • Maximum component ageMaximum metadata age:缓存时间,我这里全部设置为288000

  • Blob Store:设置仓库的存储位置,选择我们前面设置的blob中的npm

2025-02-07-19-28-29-image.png

  1. 创建 hosted 类型的npm
  • name:本地私有源上传仓库名称
  • Storage:Blob store,选择存储位置。
  • Hosted:开发环境,我们运行重复发布,因此 Delpoyment policy 我们选择 Allow redeploy。这个很重要!

2025-02-07-19-39-25-image.png

  1. 创建 group 类型的 npm
  • Name:npm-group
  • Storage:选择存储位置
  • group : 将左边可选的 2 个仓库,添加到右边的 members 下。

2025-02-07-19-42-46-image.png

到这里仓库就创建成功了,接下来修改本地的npm proxy代理地址就可以了

修改本地proxy

查看当前代理 (我这里当前使用的是阿里镜像)

2025-02-07-19-13-16-image.png

将本地镜像修改为私有源镜像地址

2025-02-07-19-14-26-image.png

下载node 包测试

下载 axios测试:

2025-02-07-19-47-10-image.png

下载成功!

首次下载时,仓库中未找到下载的node-modules,会通过配置的proxy 类型 npm 仓库去查找下载

npm-proxy仓库会将axios缓存,下次下载将从这里下载

2025-02-07-19-46-58-image.png

本地上传

1.下载npm包

npm pack react
npm pack vue
npm pack axios
  1. 单个依赖上传命令
npm publish react-19.0.0.tgz --registry=http://192.168.31.82:8081/repository/npm-rengu/


npm publish lodash-<version>.tgz --registry http://localhost:8081/repository/npm-hosted/
  1. 批量上传命令
// win
@echo off
for %%f in (*.tgz) do (
    echo Publishing %%f ...
    npm publish %%f  --registry=http://192.168.31.82:8081/repository/npm-rengu/
)
echo All packages published!
pause

// Linux
for package in *.tgz; do
  npm publish "$package" --registry http://localhost:8081/repository/npm-hosted/
done

上传成功!

2025-02-07-19-54-20-image.png

Verdaccio

安装

# 安装
npm install -g verdaccio
yarn global add verdaccio
pnpm install -g verdaccio

# 安装完毕后,启动
$> verdaccio
warn --- config file  - /home/.config/verdaccio/config.yaml
warn --- http address - http://localhost:4873/ - verdaccio/6.0.5

配置 Verdaccio

配置文件通常位于 Verdaccio 安装目录中的 conf 文件夹下,文件名为 config.yaml。可以自定义这个配置文件来设置私有源的行为,例如设置代理、权限、存储路径等。

配置文件路径

如果是全局安装的 Verdaccio,配置文件通常位于:

  • Linux/macOS~/.config/verdaccio/config.yaml
  • WindowsC:\Users<YourUsername>\AppData\Roaming\verdaccio\config.yaml

配置uplinkpackages

打开 config.yaml 文件,你需要设置 uplinkspackages 部分。uplinks 是用来配置代理源的,packages 是用来配置访问权限和代理规则的。

# uplinks部分设置代理源
uplinks:
  npmjs:
    url: https://registry.npmmirror.com/rg/   # 设置代理的 npm 淘宝源
    cache: false  # 设置为false表示不使用缓存,每次都会从npmjs拉取包

# packages部分设置权限和代理规则
packages:
  '@*/*':  # 匹配所有的命名空间包(以 @ 开头的包)
    access: $authenticated  # 需要认证才能访问
    publish: $authenticated  # 需要认证才能发布
    proxy: npmjs  # 设置代理到 npmjs 设置的源
  '**':  # 匹配所有包
    access: $authenticated
    publish: $authenticated
    proxy: npmjs  # 设置默认代理到 npmjs 设置的源
  • uplinks: 配置了 Verdaccio 从 npm 淘宝源(https://registry.npmmirror.com/)下载包的代理配置。
  • packages: 配置了包的访问权限和代理规则,proxy: npmjs 表示当本地没有该包时,Verdaccio 会通过 npmjs 代理源拉取包。
  • access 是访问权限控制,总共有三种身份:所有人(all)、匿名用户(anonymous)、认证(登陆)用户($authenticated)。

设置服务端口

配置文件中的listen字段代表服务运行的端口,默认为http://localhost:4873

配置 npm 使用 Verdaccio

当你启动了 Verdaccio 服务并配置好了代理后,你需要让你的 npm 客户端指向 Verdaccio 服务。可以通过以下命令设置:

npm set registry http://localhost:4873

这将配置 npm 使用 Verdaccio 作为默认源地址。

发布和安装包

  • 发布包到 Verdaccio
  1. 先登录到Verdaccio
npm adduser --registry http://localhost:4873
  1. 使用npm publish发布
# 可以从 npm 先下载一个包的二进制文件做测试,比如:express-4.21.2.tgz
npm publish express-4.21.2.tgz --registry http://localhost:4873
  1. 批量发布脚本
  2. # win 
    @echo off
    for %%f in (*.tgz) do (
       echo Publishing %%f ...
       npm publish %%f --registry http://192.168.31.103:4873/
    )
    echo All packages published!
    pause
    

下载不需要登录,发布包到Verdaccio需要先登录

  • 单次下载,测试是否配置成功:
$> npm i webpack -registry=http://localhost:4873/

added 77 packages in 15s

10 packages are looking for funding
  run `npm fund` for details

$> npm i webpack --registry http://localhost:4873/

up to date, audited 78 packages in 3s

10 packages are looking for funding
  run `npm fund` for details

found 0 vulnerabilities
  • 项目中下载:npm iyarnpnpm同样适用

查看 Verdaccio Web UI

默认情况下,Verdaccio 会启动在 http://localhost:4873,你可以通过浏览器访问这个地址,进入 Verdaccio 的 Web UI,管理你的包、查看日志、查看访问权限等。

配置权限和用户认证(可选)

如果你希望对包进行权限管理,可以在 config.yaml 文件中配置用户认证。

auth:
  htpasswd:
    file: ./htpasswd  # 设置认证文件存放路径
    max_users: 1000    # 设置最大用户数量

然后可以使用 npm adduser 命令将用户添加到 Verdaccio 中:

npm adduser --registry http://localhost:4873

这样用户在发布或安装包时会进行身份验证。

配置代理其他源(可选)

如果你希望 Verdaccio 代理更多的 npm 源(例如有多个公司内部源),你可以继续在 uplinks 部分添加新的代理源:

uplinks:
  company-internal:
    url: https://internal.npm.company.com/
  npmjs:
    url: https://registry.npmjs.org/

# 在 packages 部分选择合适的代理源
packages:
  'my-package':
    proxy: company-internal

启动 verdaccio

直接在终端输入verdaccio

$> verdaccio
info --- config file  - C:\Users\SnowStorm\AppData\Roaming\verdaccio\config.yaml
info --- the "crypt" algorithm is deprecated consider switch to "bcrypt" in the configuration file. Read the documentation for additional details
info --- using htpasswd file: C:\Users\SnowStorm\AppData\Roaming\verdaccio\htpasswd
info --- plugin successfully loaded: verdaccio-htpasswd
info --- plugin successfully loaded: verdaccio-audit
warn --- http address - http://localhost:4873/ - verdaccio/6.0.5
warn --- http address - http://192.168.23.1:4873/ - verdaccio/6.0.5

启动成功,访问刚刚设置的地址端口进行查看,http://localhost:4873/

2025-02-23-16-59-49-image.png

我这里有之前上传的包可以看到