Node.js + Axios 上传附件到 Gitee 仓库指定 Release
在软件开发过程中,自动化发布流程是提升效率的关键环节之一。本文将介绍如何使用 Node.js 和 Axios 库来自动化地向 Gitee 仓库的最新版本中上传发布包。通过读取项目中的 package.json 文件,获取版本信息,并自动将构建好的包文件上传到 Gitee 的对应版本发布中。
环境准备
首先,确保你的开发环境中已经安装了 Node.js。同时,我们需要安装几个 npm 包来帮助我们完成这个任务:
axios
:用于发送 HTTP 请求。fs-extra
(这里使用了fs-extra/esm
版本的readJson
方法):提供扩展的文件系统方法,这里主要用于读取 package.json 文件。form-data
(可选,但在本例中未直接使用,因为Axios
可以处理FormData
):用于构建表单数据,但Axios
库已经能够很好地处理FormData
对象。
你可以通过运行以下命令来安装这些依赖:
pnpm i -D axios fs-extra # 注意:form-data 虽未直接使用,但如果你需要处理文件上传,可以安装 # pnpm i -D install form-data
代码实现
下面是一个完整的示例代码,展示了如何自动化地从 package.json 读取版本信息,并上传一个 zip 包到 Gitee 的最新发布版本。
import { readFile } from 'node:fs/promises'; import axios from 'axios'; import { readJson } from 'fs-extra/esm'; import { basename, join } from 'path'; const { GITEE_TOKEN } = process.env; // 确保你的环境变量中设置了 GITEE_TOKEN const owner = 'tive'; // 替换为你的 Gitee 用户名 const repo = 'cookies'; // 替换为你的 Gitee 仓库名 async function getPkg() { try { return await readJson(join(process.cwd(), 'package.json')); } catch (e) { console.log(e); return null; } } async function getLatestRelease() { try { const { data } = await axios({ url: `https://gitee.com/api/v5/repos/${owner}/${repo}/releases/latest`, params: { access_token: GITEE_TOKEN, }, }); console.log(data); return data?.id; } catch (e) { console.log(e); return null; } } !(async function main() { const { name, version } = await getPkg(); // console.log({ name, version }); const filename = `${name}-${version}.zip`; // 这里可以根据你的项目结构调整 const filepath = join(process.cwd(), `package/${filename}`); // 这里可以根据你的项目结构调整 const release_id = await getLatestRelease(); // console.log(release_id); const formData = new FormData(); const file = await readFile(filepath); let files = new File([new Uint8Array(file)], basename(filepath), { type: 'application/zip', // 可以根据文件类型设置 MIME 类型 }) formData.append('access_token', GITEE_TOKEN); formData.append('release_id', release_id); formData.append('file', files, filename); try { const config = { headers: { ...formData.getHeaders(), // 获取表单的 Content-Type }, }; let { data } = await axios({ url: `https://gitee.com/api/v5/repos/${owner}/${repo}/releases/${release_id}/attach_files`, method: 'post', headers: { 'Content-Type': 'multipart/form-data', }, data: formData, }) console.log(data) } catch (e) { console.log(e); } })();
拓展
以上示例中使用的是 js 内置 FormData
对象,当然也可以安装 form-data
库,并使用其提供的 FormData
构造函数来构建表单数据。
示例如下:
import axios from 'axios' import FormData from 'form-data' import { createReadStream } from 'fs' async function main() { try { let formData = new FormData() let file = createReadStream(filepath) formData.append('access_token', GITEE_TOKEN) formData.append('release_id', release_id) formData.append('file', file, filename) } catch (e) { console.log(e) } }
注意事项
环境变量:确保你的环境变量中设置了 GITEE_TOKEN,这是访问 Gitee API 所必需的。
文件路径:根据你自己的项目结构,可能需要调整 filepath 的路径。
错误处理:在实际使用中,应该添加更完善的错误处理逻辑,以便更好地调试和定位问题。
安全性:GITEE_TOKEN 是一个敏感信息,确保不要将其硬编码在代码中,而是通过环境变量等方式安全地管理。
通过以上步骤,就可以实现一个自动化的脚本,将项目包上传到 Gitee 的发布版本中,从而简化发布流程,提升工作效率。
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。