npm 私有源仓库
因为涉及公司业务或其他种种原因,我们开发的内部包不能发布到 NPM 平台,我们可以在公司内部建立一个的私有的 NPM 平台内部访问使用
nexus 搭建
设置账户密码
账号:*****
密码:*****
地址: http://****:8081/
创建 npm 管理角色
添加用户
创建 blob 存储
创建npm仓库
- 选择左侧
Repositories
,点击Create repository
选择要创建的仓库类型
- 创建 proxy 类型的 npm 仓库
-
name
:proxy-npm -
proxy
:镜像代理地址 -
Maximum component age
、Maximum metadata age
:缓存时间,我这里全部设置为288000
-
Blob Store
:设置仓库的存储位置,选择我们前面设置的blob
中的npm
- 创建 hosted 类型的npm
name
:本地私有源上传仓库名称
Storage
:Blob store,选择存储位置。Hosted
:开发环境,我们运行重复发布,因此 Delpoyment policy 我们选择 Allow redeploy。这个很重要!
- 创建 group 类型的 npm
Name
:npm-groupStorage
:选择存储位置group
: 将左边可选的 2 个仓库,添加到右边的 members 下。
到这里仓库就创建成功了,接下来修改本地的npm proxy代理地址就可以了
修改本地proxy
查看当前代理 (我这里当前使用的是阿里镜像)
将本地镜像修改为私有源镜像地址
下载node 包测试
下载 axios
测试:
下载成功!
首次下载时,仓库中未找到下载的node-modules
,会通过配置的proxy 类型 npm 仓库
去查找下载
npm-proxy
仓库会将axios
缓存,下次下载将从这里下载
本地上传
1.下载npm包
npm pack react
npm pack vue
npm pack axios
- 单个依赖上传命令
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/
- 批量上传命令
// 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
上传成功!
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
- Windows:
C:\Users<YourUsername>\AppData\Roaming\verdaccio\config.yaml
配置uplink
和packages
打开 config.yaml
文件,你需要设置 uplinks
和 packages
部分。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
- 先登录到
Verdaccio
npm adduser --registry http://localhost:4873
- 使用
npm publish
发布
# 可以从 npm 先下载一个包的二进制文件做测试,比如:express-4.21.2.tgz
npm publish express-4.21.2.tgz --registry http://localhost:4873
- 批量发布脚本
-
# 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 i
,yarn
,pnpm
同样适用
查看 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/
我这里有之前上传的包可以看到