向Nexus上传本地的npm依赖

最近在项目上遇到了一个需求,需要将相关的npm依赖包上传至Nexus(因为后续的开发是在内网环境中开发,没有外网,无法使用公网的镜像)。
解决这个问题,有两种思路

方式1:暂时开通外网权限,通过设置类型为代理(proxy)的私库来缓存相关的依赖包。

首先就是新建一个私库:



选择npm(proxy)



然后输入名称和要代理的远程仓库地址

完成之后本地就可以将拉取依赖的地址设置成这个新建的私库的地址,拉取完成后相关的依赖便会缓存在这个私库中。

优点:操作方便、自动缓存
缺点:每次变更了依赖内容都需要去申请一次外网权限

方式2:向Nexus上传本地的npm依赖

首先也是需要创建私库,和方式1不同,创建的是类型为hosted的私库:



之后便是需要下载本地对应依赖的tgz包并且上传到这个私库中。

  1. 安装node-tgz-downloader,用来下载依赖的tgz文件
npm install node-tgz-downloader -g

2.安装依赖

npm install

3.安装完依赖后会生成package-lock.json文件,然后可以执行下面的命令下载对应的依赖包tgz(注意:下载时一些包经常会下载失败,需要保证网络条件稳定,若失败可多尝试几次)下载的tgz文件会在项目根目录/tarballs下

download-tgz package-lock package-lock.json

ps:如果是使用yarn来安装依赖,可以将yarn.lock先转换成package-lock.json:

npm install -g synp

// 在根目录下
synp --source-file yarn.lock

4.去重
在根目录下新建一个tgz文件夹,然后在tarballs文件夹下执行下面的shell命令:

find . -name '*.tgz' -exec cp -f {} ../tgz \;

5.创建并执行发布脚本
新建.publish.sh,内容为:

#!/bin/bash
PACKAGE_PATH=./tgz
REPOSITORY=your site
npm login --registry=$REPOSITORY
for file in $PACKAGE_PATH/*.tgz; do
 npm publish --registry=$REPOSITORY $file
done

然后执行该脚本,上传速度比较慢,个人测试2000多个tgz文件,用时1小时多。
如果上传后部分包缺失,可以重新上传或者采用nexus的手动上传

你可能感兴趣的:(向Nexus上传本地的npm依赖)