离线内网搭建私有模块仓库的核心是部署verdaccio服务:先离线安装node.js,再通过npm全局安装verdaccio,配置禁用uplinks、指定本地storage与htpasswd,初始化用户后即可发布和安装私有及缓存的公共包。

在离线内网环境中搭建本地私有模块仓库,核心不是“写模块”,而是“建一个能存、发、装 JavaScript 模块的本地服务”。JavaScript 本身不提供仓库能力,必须借助 npm 生态的工具链,其中 Verdaccio 是最轻量、最适配内网场景的选择——它用 Node.js 写成,单进程启动,支持私有包发布 + 公共包离线缓存,且无需外网连接即可运行。
一、先装好 Node.js(离线方式)
内网服务器不能联网下载,必须提前在外网准备好 Node.js 二进制包:
- 去 Node.js 官网 下载对应系统的 LTS 版本(如
node-v18.16.0-linux-x64.tar.xz),解压后拷贝到内网服务器 - 执行安装(以 Linux 为例):
sudo tar -xJf node-v18.16.0-linux-x64.tar.xz -C /usr/local/<br>sudomv /usr/local/node-v18.16.0-linux-x64 /usr/local/node<br>echo 'export NODE_HOME=/usr/local/node' | sudo tee -a /etc/profile<br>echo 'export PATH=$NODE_HOME/bin:$PATH' | sudo tee -a /etc/profile<br>source /etc/profile
- 验证:
node -v和npm -v能正常输出即成功
二、部署 Verdaccio(不依赖 Docker 也可行)
如果内网连 Docker 镜像仓库也不通,就用 npm 全局安装 Verdaccio(需提前在外网打包好 verdaccio 及其依赖):
- 在外网机器执行:
npm pack verdaccio,得到verdaccio-5.32.0.tgz类似文件 - 把该 tgz 文件和所有依赖(可用
npm install --offline模拟验证)一并拷入内网 - 内网中安装:
npm install -g ./verdaccio-5.32.0.tgz - 生成默认配置:
verdaccio --init,会创建~/.verdaccio/config.yaml - 关键配置项(确保离线可用):
- 注释掉或删除
uplinks区块(避免尝试连外网 registry) - 设置
storage: ./storage,路径需有写权限 - 开启
auth:下的htpasswd并指定file: ./htpasswd(用于账号管理)
- 注释掉或删除
三、初始化用户并发布第一个私有模块
Verdaccio 默认只允许登录用户发布包,需手动添加账号:
- 用 htpasswd 工具生成密码文件(若内网没装,可在外网生成好再传入):
echo 'admin:$2y$05$...' > ./htpasswd(密码用htpasswd -B -c ./htpasswd admin生成) - 启动服务:
verdaccio -c ~/.verdaccio/config.yaml,默认监听http://localhost:4873 - 在本地开发机(同内网)配置 npm 指向私仓:
npm config set registry http://<verdaccio-ip>:4873</verdaccio-ip> - 登录:
npm login --registry http://<verdaccio-ip>:4873</verdaccio-ip>,输入刚才设的账号密码 - 进入你的模块目录(含
package.json),执行:npm publish—— 包就上传到内网仓库了
四、让团队成员能装包(含私有+缓存过的公共包)
只要 registry 指向 Verdaccio,npm install 就自动生效。但要注意两点:
- 首次使用前,所有人需运行:
npm config set registry http://<verdaccio-ip>:4873</verdaccio-ip> - 若想让 Verdaccio 同时代理部分外网包(比如你已提前同步过 lodash、axios 等常用包),可在配置里加回
uplinks并把包文件手动放入storage对应目录(结构为storage/lodash/-/lodash-4.17.21.tgz),Verdaccio 会直接读取,不触发网络请求 - 建议统一分发一份
.npmrc给团队:registry=http://<verdaccio-ip>:4873<br>always-auth=true</verdaccio-ip>
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











