# Fast.Axios
**Repository Path**: FastDotnet/Fast.Axios
## Basic Information
- **Project Name**: Fast.Axios
- **Description**: Fast 平台下基于 Axios,TypeScript 构建的请求库。
- **Primary Language**: TypeScript
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: https://fastdotnet.com
- **GVP Project**: No
## Statistics
- **Stars**: 2
- **Forks**: 0
- **Created**: 2025-02-07
- **Last Updated**: 2026-09-14
## Categories & Tags
**Categories**: web-dev-toolkits
**Tags**: None
## README
简体中文 | English
# @fast-china/axios
面向 Fast 项目、浏览器与 uni-app 的类型化 Axios 请求库,内置 Fast.NET 响应处理、uni-app adapter 和小程序构建插件。
[](https://www.npmjs.com/package/@fast-china/axios) [](https://nodejs.org/) [](https://axios-http.com/) [](./LICENSE)
## 特性
- 保留 Axios 请求、响应拦截器、取消、参数序列化、`validateStatus` 和响应转换语义。
- 按 Fast.NET `ApiResponse` 约定处理业务状态、简洁数据、错误提示、缓存、Loading 和加解密扩展点。
- 在 uni-app 中把 `method: "upload" | "download"` 分流到 `uni.uploadFile` 和 `uni.downloadFile`。
- 提供 `axios.upload()`、`axios.download()` 以及完整的 TypeScript 平台配置扩展。
- 提供 Vite 与 Webpack 小程序插件,按需替换 Axios 的 FormData 和 Blob 平台模块。
- 从仓库根目录发布纯 ESM、类型声明、独立的 `vite`、`webpack` 子路径和单独压缩的 CDN 入口。
- 打包前验证运行时、公开类型、包入口、Source Map、CDN 全局变量、npm 归档和 Publint。
## 环境要求
- Axios `^1.8.1`。
- 开发环境使用 Node.js `^22.18.0 || ^24.18.0` 和 pnpm `^11.0.0`。
- uni-app 类型项目建议安装 `@dcloudio/types`。
- uni-app 小程序构建需要在应用项目中安装 `miniprogram-formdata` 和 `miniprogram-blob`。
## 安装
```bash
pnpm add @fast-china/axios axios
```
小程序项目另外安装平台兼容包:
```bash
pnpm add miniprogram-formdata miniprogram-blob
```
### CDN
`unpkg` 和 `jsdelivr` 字段均指向 `dist/index.global.min.js`。页面必须先加载 Axios,再通过全局变量 `FastAxios` 使用本 SDK:
```html
```
对应的 unpkg 地址为 `https://unpkg.com/@fast-china/axios@2/dist/index.global.min.js`。CDN 产物仅用于浏览器;uni-app 和 Vite/Webpack 插件必须使用包管理器导入。
## 快速开始
应用启动时先创建全局 FastAxios 容器,再通过 `axiosUtil.request()` 发起请求:
```ts
import { axiosUtil, createFastAxios } from "@fast-china/axios";
const fastAxios = createFastAxios({
baseUrl: "https://api.example.com",
timeout: 30_000,
headers: {
Authorization: "Bearer ",
},
requestCipher: false,
});
interface User {
id: number;
name: string;
}
const user = await axiosUtil.request({
url: "/users/1",
method: "get",
requestType: "query",
});
```
`axiosUtil.request()` 默认按 Fast.NET RESTful 响应读取 `code`、`success`、`message` 和 `data`,成功时直接返回 `data`。如需原始结构,可通过单次请求选项关闭 `simpleDataFormat` 或 `restfulResult`。
## 项目处理器
所有项目级处理器都通过 `.use()` 替换当前实现。它不是 Axios 原生的多拦截器队列,重复注册时以最后一次为准:
```ts
fastAxios.message.error.use((message) => {
// 接入项目自己的 Message 组件。
});
fastAxios.loading.show.use((text) => {
// 显示 Loading。
});
fastAxios.loading.close.use((_options) => {
// 关闭 Loading,并自行处理并发请求计数。
});
fastAxios.interceptors.request.use((config) => {
config.headers.set("X-Request-Source", "fast-app");
});
fastAxios.interceptors.response.use((response) => {
// 返回 null 或 undefined 时继续执行内置响应流程。
return undefined;
});
fastAxios.interceptors.responseError.use((_error) => {
// 返回非空值时替换最终抛出的错误。
return undefined;
});
```
缓存、请求加密和响应解密同样通过 `cache.get/set.use()` 与 `crypto.encrypt/decrypt.use()` 接入。默认加解密处理器不会提供实际密码学保护,启用 `requestCipher` 前必须注册项目自己的协议实现。
## uni-app adapter
`axiosUtil.request()` 检测到全局 `uni` 时会自动使用 uni-app adapter。Fast.NET 生成的移动端上传调用保持原有约定:
```ts
const fileId = await axiosUtil.request({
url: "/files/avatar",
method: "upload",
requestType: "upload",
filePath,
name: "file",
cancelDuplicateRequest: false,
});
```
如果直接创建 Axios 实例,可显式安装 adapter:
```ts
import axios from "axios";
import { createUniAppAxiosAdapter } from "@fast-china/axios";
const http = axios.create({
adapter: createUniAppAxiosAdapter(),
baseURL: "https://api.example.com",
});
const response = await http.upload(
"/files/avatar",
{},
{
filePath,
name: "file",
}
);
```
上传、下载、取消、进度事件和平台差异见 [uni-app adapter 中文文档](./src/uni-adapter/README.zh.md)。
## 小程序构建插件
Vite 项目使用独立子路径,插件只在 `UNI_PLATFORM` 以 `mp-` 开头时生效:
```ts
import { defineConfig } from "vite";
import uniAppAxiosPlugin from "@fast-china/axios/vite";
export default defineConfig({
plugins: [uniAppAxiosPlugin()],
});
```
Webpack 项目使用:
```ts
import uniAppAxiosPlugin from "@fast-china/axios/webpack";
export default {
plugins: [uniAppAxiosPlugin()],
};
```
插件会替换 Axios 的 FormData、Blob 平台模块,并在应用项目缺少对应兼容包时直接终止构建。H5、App 和普通 Web 构建保持原始模块不变。
## 包入口
| 导入路径或全局变量 | 用途 | 运行环境 |
| --------------------------- | --------------------------------------- | ------------------ |
| `@fast-china/axios` | FastAxios、`axiosUtil`、uni-app adapter | 浏览器、uni-app |
| `@fast-china/axios/vite` | Vite 小程序 FormData/Blob 插件 | Node.js 构建配置 |
| `@fast-china/axios/webpack` | Webpack 小程序 FormData/Blob 插件 | Node.js 构建配置 |
| `FastAxios` | 压缩后的 IIFE 根入口 | 浏览器 script 标签 |
包导入阶段不会访问 `window` 或 `uni`。平台 API 只在创建 adapter、执行请求或调用对应功能时使用。
## 文档
- [API 文档](./docs/API.zh-CN.md)
- [uni-app adapter](./src/uni-adapter/README.zh.md)
- [运行时与包契约](./docs/RUNTIME_CONTRACT.md)
- [开发与发布](./docs/DEVELOPMENT_RELEASE.zh-CN.md)
- [贡献指南](./CONTRIBUTING.md)
- [安全策略](./SECURITY.md)
- [更新日志](./CHANGELOG.md)
## 开发
```bash
corepack enable
pnpm install --frozen-lockfile
pnpm check
```
## 许可证
[Apache-2.0](./LICENSE)