You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用npm批量下载指定scope下的所有包至内部Artifactory?

批量拉取指定Scope下所有NPM包的可行方案

这个需求确实挺普遍的,npm本身没提供npm pack @progress/*这种直接通配的命令,但咱们可以通过脚本或者工具来实现批量操作,给你几个靠谱的方案:

方案一:Shell脚本+npm view批量打包

这是最直接的方式,先获取Scope下的所有包名,再循环执行打包命令:

  1. 首先安装jq(用来处理JSON输出,没装的话可以用npm install -g jq或者系统包管理工具安装)
  2. 执行下面的脚本,一次性打包@progress下所有包:
# 获取@progress下的所有包名并循环打包
npm view @progress/* name --json | jq -r '.[]' | while read pkg; do
  echo "开始打包 ${pkg}..."
  npm pack "$pkg"
done

这个脚本会先拉取@progress下所有包的名称列表,然后逐个执行npm pack,打包后的.tgz文件都会放在当前目录。

方案二:Node.js脚本实现(适合不熟悉Shell的同学)

如果更习惯用Node.js写脚本,也可以用下面的代码:

const { execSync } = require('child_process');

try {
  // 获取指定Scope下的所有包名称
  const pkgList = JSON.parse(execSync('npm view @progress/* name --json', { encoding: 'utf8' }));
  
  pkgList.forEach(pkg => {
    console.log(`正在处理 ${pkg}...`);
    // 执行打包命令,输出实时打印到控制台
    execSync(`npm pack ${pkg}`, { stdio: 'inherit' });
  });
  
  console.log('所有包打包完成!');
} catch (err) {
  console.error('打包过程出错:', err.message);
}

把这段代码保存成sync-packages.js,然后运行node sync-packages.js就行。

方案三:利用Artifactory本身的同步能力(更省心)

如果你们公司的Artifactory支持配置远程仓库代理,其实可以直接在Artifactory里添加npmjs.com作为远程源,然后设置只同步@progress这个Scope的包。这样后续不仅能一次性同步现有包,新发布的包也能自动同步,不用每次手动打包上传。

具体操作大概是:

  • 在Artifactory里创建一个远程仓库,指向https://registry.npmjs.org/
  • 在仓库的Advanced设置里,添加@progress/*作为Include Patterns,这样只会同步这个Scope下的包
  • 配置完成后,Artifactory会自动拉取并缓存@progress下的所有包,后续内部使用直接从Artifactory拉取就行

额外注意事项

  • 如果@progress是私有Scope,确保已经用npm login登录了对应的私有仓库,不然会拉取不到包
  • 默认npm pack会拉取包的最新版本,要是需要指定版本,可以把命令改成npm pack ${pkg}@x.x.x或者npm pack ${pkg}@latest
  • 打包完成后,批量上传到Artifactory可以用Artifactory的CLI工具jfrog rt upload,比如jfrog rt upload "*.tgz" <你的内部仓库路径>

内容的提问来源于stack exchange,提问作者cjones26

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 06:47:37