npm包 发布到 Nexus

场景:

npm包批量上传到Nexus


问题描述

在大型项目中,我们可能会有很多自定义的npm包需要管理。手动一个接一个地上传这些包会非常耗时,而且容易出错。这时,我们可以利用一些工具或者脚本来实现npm包的批量上传

解决方案:

一、批量调用Nexus Api 接口

const fs = require('fs');
const axios = require('axios');

async function uploadPackages() {
  try {
    const packages = [
      { name: 'package1', path: '/path/to/package1.tgz' },
      { name: 'package2', path: '/path/to/package2.tgz' },
      // 添加更多的包
    ];

    for (let i = 0; i < packages.length; i++) {
      const { name, path } = packages[i];

      const packageData = fs.readFileSync(path);
      const formData = new FormData();
      formData.append('name', name);
      formData.append('package', packageData);

      const response = await axios.post('http://nexus-api-url/upload', formData, {
        headers: {
          'Content-Type': 'multipart/form-data',
        },
      });

      console.log(`Package ${name} uploaded successfully.`);
    }
  } catch (error) {
    console.error('An error occurred while uploading packages:', error);
  }
}

uploadPackages();
 

二、使用npm-registry-client

npm-registry-client是一个Node.js库,用于与npm注册表交互。我们可以用它来自动化npm包的上传过程。

首先,你需要安装这个库:

bash
npm install npm-registry-client

然后,你可以创建一个简单的脚本,如下所示:

javascript
const Client = require('npm-registry-client');
const client = new Client();

async function uploadPackage(name, version) {
  try {
    await client.add({
      auth: { token: 'your-npm-token' },
      name,
      version,
      dist: {
        tarball: `https://nexus.example.com/repository/npm-group/${name}-${version}.tgz`
      }
    });
    console.log(`${name}@${version} uploaded.`);
  } catch (err) {
    console.error(`Failed to upload ${name}@${version}:`, err);
  }
}

// List your packages here:
const packages = [
  { name: 'package1', version: '1.0.0' },
  { name: 'package2', version: '2.0.0' },
  // ...
];
packages.forEach(package => uploadPackage(package.name, package.version));

在这个脚本中,你需要将your-npm-token替换为你自己的npm注册表令牌。这个令牌可以在Nexus控制台中生成。

运行这个脚本后,所有的包都会被上传到Nexus。

三、使用conventional-changelog-cli

如果你的项目使用了Conventional Commits规范,并且生成了changelog文件,那么你可以使用conventional-changelog-cli来自动提取新版本的信息,并基于这些信息创建和上传新的npm包。

首先,你需要安装这个库:

bash
npm install conventional-changelog-cli

然后,你可以创建一个类似于上述的脚本,但是这次你可以在changelog文件中提取新版本的信息,而不需要手动指定每个包的名称和版本。

  • 10
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值