在内网创建npm私有仓库

安装Verdaccio和pm2

注:Windows系统无需安装pm2

## 安装,使用详见:https://www.sidoc.cn/doc/1197.html 和 https://www.sidoc.cn/doc/1357.html
npm install pm2 -g

## 安装
npm install -g verdaccio

## 启动,启动后会输出配置文件位置、访问地址等信息
verdaccio

注意:在windos自带的 cmd命令行Git Bash 中启动 verdaccio 时,其配置文件和npm包的位置是不一样的;

Windows系统下的verdaccio最佳实践

1.0> 使用nvm切换node版本后,该版本下通过npm安装的所有全局依赖都会失效,因此切换node版本后需要重新安装verdaccio;但不论在哪个node版本下安装verdaccio,只要启动verdaccio时指定固定的配置文件,就可以确保配置信息和依赖包的缓存位置永远不变;

## 启动时指定配置文件
## 默认情况下,npm依赖包会缓存在配置文件的同级storage目录下 
verdaccio -c D:\verdaccio\config.yaml

2.0> 设置verdaccio开机自启

创建名称为start_verdaccio.vbs的脚本,添加如下内容,然后将此脚本放在开机启动目录下即可

Set WshShell = CreateObject("WScript.Shell")
WshShell.Run "cmd /c verdaccio -c D:\verdaccio\config.yaml", 0, False
Set WshShell = Nothing

3.0> 有时网络不好,某些包无法下载,如下图所示:

这种情况下可以自行从中央仓库或国内镜像仓库去下载,下载完成后放在 D:\verdaccio\storage 缓存目录下的指定依赖包目录下即可;

如下所示,将  http://localhost:4873/cesium/-/cesium-1.114.0.tgz 中的  http://localhost:4873/ 替换为中央仓库的地址;

## 从npm官方仓库下载(推荐)
https://registry.npmjs.org/cesium/-/cesium-1.114.0.tgz

## 从阿里镜像仓库下载
https://registry.npmmirror.com/cesium/-/cesium-1.114.0.tgz

注:网络不好时,国内镜像源下载依赖包也经常失败,因此使用 verdaccio 将依赖包缓存在本地是非常必要的。

配置Verdaccio

打开配置文件config.yaml,进行如下配置:(启动 Verdaccio 时会输出配置文件位置,配置完成后要重启Verdaccio)

## 配置 Verdaccio 网页的title、logo等
web:
  ## 网页title
  title: Verdaccio
  ## 包的排序 asc 降序 desc 升序 
  # sort_packages: asc 
  ## 是否开启暗黑模式 
  # darkMode: true 
  ## 网页 logo 
  # logo: http://somedomain/somelogo.png 
  ## 网页 favicon
  # favicon: http://somedomain/favicon.ico | /path/favicon.ico 
  ## ...


## 配置上游源,此处设为阿里云的源
uplinks: 
  npmjs: 
    url: https://registry.npmmirror.com/ 

## 配置 Verdaccio 网页的监听地址
listen: 0.0.0.0:4873

## 配置 Verdaccio 网页为中文
i18n:
  web: zh-CN

缓存npm包到Verdaccio

## 1.0> 设置npm源为verdaccios私库
npm config set registry http://localhost:4873/
npm config get registry

## 2.0> 清除npm缓存
## 使用npm安装包时,npm会先从缓存中寻找包,如果缓存中没有才会去仓库中下载;
## 如果npm从本地缓存中安装依赖包,就不会走verdaccios私库,verdaccios私库就无法缓存npm包,但我们的目的是想让verdaccios私库缓存npm包,所以必须在安装依赖包前清理本地缓存;
npm cache clean -f

## 3.0> 通过 verdaccio 安装当前目录下 package.json 中的依赖,verdaccios会自动缓存没有被缓存的包
npm install --registry http://localhost:4873

## 验证某个包是否已被缓存
http://localhost:4873/<包名>

注:使用 npm 下载包时,不要开代理软件,否则下载某些包时可能会报错;

注:不要通过 package.json 下载npm包,要根据 packlage.lock.josn 下载;因为通过 packlage.lock.josn 才能下载版本统一的包,通过 packlage.josn 下载的包其版本不固定,在不同的内网环境中可能会报错或找不到包。

注:Verdaccio默认将npm包缓存到storage目录下,如下图;迁移Verdaccio后,其中package.json中的某些属性可能会被自动修改,例如:fetched、_ref等,这些属性只是记录npm包的更新

状态和历史,并不影响正确使用。

将Verdaccio迁移到内网

迁移verdaccio需要知道全局npm依赖和verdaccio的位置,并将其中的一些文件复制到内网相应的位置;具体要复制的文件如下:

1.0> 通过 npm root -g 命令查看 npm 全局依赖的位置,并复制如下文件3分部文件

2.0> 启动 verdaccio ,启动后会输出 verdaccio 配置目录位置,复制整个 verdaccio 配置目录:

注:配置目录并不一定在 .config 目录下,请务必在启动 verdaccio 后,查看具体的配置目录位置;

pm2启动Verdaccio及常用命令

## 列出被 pm2 管理的所有进程
pm2 -ls

## 关闭某个进程
pm2 stop C:\Users\EDY\AppData\Roaming\npm\node_modules\verdaccio\bin\verdaccio

## 重启某个进程
pm2 restart C:\Users\EDY\AppData\Roaming\npm\node_modules\verdaccio\bin\verdaccio

## 删除某个进程
pm2 delete C:\Users\EDY\AppData\Roaming\npm\node_modules\verdaccio\bin\verdaccio

## 启动某个进程
pm2 start C:\Users\EDY\AppData\Roaming\npm\node_modules\verdaccio\bin\verdaccio

注:上述命令不能在git bash中执行,必须在cmd中执行;git bash中要求路径必须是/分隔,而cmd中要求路径必须是\分隔;

注:在windows上,pm2不能直接设置开机自启,需要借用三方库;此处直接将启动命令写到.bat脚本中,然后放到开机启动目录下来实现开机自启,启动脚本内容如下:

pm2 start C:\Users\EDY\AppData\Roaming\npm\node_modules\verdaccio\bin\verdaccio

设置npm源

## 设置npm源为私库
npm config set registry http://localhost:4873/

## 恢复npm源为默认
npm config set registry https://registry.npmjs.org/
## 阿里云npm镜像
npm config set registry https://registry.npmmirror.com

## 查看npm源
npm config get registry

注意事项

1. 安装配置完Verdaccio后,执行 npm install 命令时,npm 会先从本地全局缓存搜索依赖包;若未找到,再会去本地仓库找,如果本地仓库未找到,再会去远程仓库找。因此使用 npm install 向本地仓库缓存依赖包。

2. 通过 npm install 安装依赖包,当前目录下的 package.json.lock 要删除,因为该文件中指定的依赖的下载位置,其优先级高于 npm config set resgistry 配置的镜像。

举报

© 著作权归作者所有


1