环境准备条件:
1)Nexus服务及对应的登录账号和密码,该服务上已经建立好的npm仓库地址
2)node npm 环境
3)Git bash 环境
相关操作步骤如下:
1、根据项目中yarn.lock文件获取每个仓库的下载链接
相关代码如下:
const fs = require('fs');
const path = require('path');
fs.readFile(path.join(__dirname, 'yarn.lock'), 'utf8', (err, data) => {
if (err) {
console.error('读取文件时发生错误:', err);
return;
}
// 分割每一行
const lines = data.split('\n');
lines.forEach((item, index) => {
const trimeReg = /^\s+|\s+$/g;
lines[index] = item.replace(trimeReg, '')
})
console.log("lines******", lines)
// 正则表达式用于匹配resolved字段
const resolvedRegex = /^resolved "(.*)"/gm;
// 提取resolved字段
let match;
const resolvedVersions = [];
lines.forEach((item, index) => {
const match = resolvedRegex.exec(item)
console.log("match****", match)
if(match !== null) {
resolvedVersions.push(match[1]);
}
})
// 打印结果
console.log("resolvedVersions***", resolvedVersions);
const outputFilePath = path.join(__dirname, 'resolved.json');
fs.writeFileSync(outputFilePath, JSON.stringify(resolvedVersions, null, 2), 'utf-8')
});
2、根据resolved.json文件中的下载链接批量下载npm的*.tgz包(具体方法可使用迅雷批量下载或者代码批量处理)并放入npms文件夹下
3、准备发布脚本publish.sh,并将脚本文件放于npms同级目录,使用Git bash打开publish.sh所在的文件路径并执行sh publish.sh,输入登录Nexus服务的账号和密码即可实现本地包批量上传
publish.sh:
PACKAGE_PATH=./npms
REPOSITORY=http://*.*.*.*:*/repository/npm-pc/
npm login --registry=$REPOSITORY
for file in $PACKAGE_PATH/*.tgz; do
npm publish --registry=$REPOSITORY $file
done