tgz包批量下载脚本
内网中,无法直接下载依赖包,可提前在有网环境中提前下载好package.json中的所有依赖的tgz包,然后再内容中直接通过tgz安装依赖包,以下脚本可以直接执行
#!/bin/bash
echo ">>> 开始并行收集tgz文件... <<<"
PRO_PATH="./"
REGISTRY="https://registry.npmmirror.com"
DIR_NAME="tgz-folder"
MAX_CONCURRENT=4 # 最大并发数
# 创建目标目录
mkdir -p $DIR_NAME
# 函数:下载单个包
download_package() {
local package=$1
echo "开始下载: $package"
if cd $DIR_NAME && npm pack "$package" --registry=$REGISTRY > /dev/null 2>&1; then
echo "✓ 成功: $package"
cd ..
return 0
else
echo "✗ 失败: $package"
cd ..
return 1
fi
}
# 导出函数,用于并行处理
export -f download_package
export DIR_NAME REGISTRY
# 提取依赖包列表
PACKAGES=$(node -e "
const pkg = require('./package.json');
const allDeps = {...pkg.dependencies, ...pkg.devDependencies};
Object.entries(allDeps).forEach(([name, version]) => {
if (typeof version === 'string' &&
!version.startsWith('file:') &&
!version.startsWith('link:') &&
!version.startsWith('git+') &&
!version.startsWith('http')) {
console.log(name + '@' + version);
}
});
")
# 并行下载
echo "$PACKAGES" | xargs -I {} -P $MAX_CONCURRENT bash -c 'download_package "$@"' _ {}
echo ">>> tgz文件收集完成 <<<"
echo ">>> 文件保存在 ./$DIR_NAME/ 目录 <<<"
# 安装文件夹中的所有 tgz 包
# npm install ./tgz-bfd/*.tgz
