ky
是什么?ky
是一个 基于 Fetch API 的轻量级 HTTP 请求库,主要用于在浏览器或 Node.js 环境中发起网络请求。
它类似于 axios
,但是更小、更现代化,默认使用原生 fetch
并进行了一些常用增强。
GitHub: https://github.com/sindresorhus/ky
轻量 & 现代化
fetch
,不引入复杂 polyfill,适合现代浏览器和 Node.js简洁的 API
.json()
或 response.ok
判断内置功能
.json()
方法直接返回解析后的结果AbortController
小而专注
axios
那样的庞大生态,体积小npm install ky
# 或
yarn add ky
import ky from 'ky';
const data = await ky.get('https://api.example.com/items').json();
console.log(data);
response.ok
await ky.post('https://api.example.com/items', {
json: { name: 'Apple', price: 10 }
});
初看 ky
确实像是 fetch
的简单包装,看不出“必须用它”的理由。它的好处主要在于简化常见操作和内置功能,而不是颠覆性的新特性。
import ky from 'ky';
const api = ky.create({
prefixUrl: 'https://api.example.com',
timeout: 5000, // 超时 5 秒
retry: 2, // 自动重试 2 次
headers: {
Authorization: 'Bearer my-token'
}
});
const items = await api.get('items').json();
const api = ky.create({
hooks: {
beforeRequest: [
request => {
console.log('发请求前:', request.url);
}
],
afterResponse: [
(request, options, response) => {
console.log('收到响应:', response.status);
}
]
}
});
fetch
和 ky
的区别
fetch
的写法比如 GET 请求 + 自动解析 JSON + 错误处理:
async function getData() {
const response = await fetch('https://api.example.com/items');
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
const data = await response.json();
return data;
}
if (!response.ok)
处理错误.json()
解析ky
的写法import ky from 'ky';
const data = await ky.get('https://api.example.com/items').json();
console.log(data);
优势:
response.ok
).json()
直接返回 JSON,不需要 .then(res => res.json())
AbortController
)比如带重试、超时和统一 Header:
import ky from 'ky';
const api = ky.create({
prefixUrl: 'https://api.example.com',
timeout: 5000, // 5秒超时
retry: 2, // 自动重试2次
headers: {
Authorization: 'Bearer my-token'
},
});
try {
const data = await api.get('items').json();
console.log(data);
} catch (error) {
console.error('请求失败:', error);
}
如果用原生 fetch
写,得自己处理超时、重试、Headers 注入,会啰嗦很多。
ky
适合:
axios
的老旧浏览器兼容和复杂功能不适合:
axios
或封装了自己的 fetch
工具ky
本质是 fetch 的现代化封装,优势在于:
如果你项目轻量、以现代浏览器或 Node.js 环境为主,ky
是一个简洁干净的选择;
如果项目已有 axios 或自研封装,ky
价值不大。