大家好,我是老纪。

常常重视前端Node.js发展的同学,想必知道Node.js这几年来正在努力做 Web API 的兼容性支撑,比如说 Web Crypto、Fetch、Web Stream、WebAssembly、Web Worker等等,这些原归于Deno的竞赛优势,现在在逐渐被Node.js拉平。

那么,咱们从什么版别起能够运用原生的Fetch API呢?

答案是:v18.0.0

这是Node.js API文档的截图:

Node.js在哪个版别起能够运用原生Fetch API?

表明Fetch API是在v17.5.0v16.15.0起添加的,可是需求额定运用一个flag(--experimental-fetch)来开启,只不过会打印正告内容,表示并不安稳:

> node --experimental-fetch index.js
Node: v17.5.0
(node:40605) ExperimentalWarning: Fetch is an experimental feature. This feature could change at any time
(Use `node --trace-warnings ...` to show where the warning was created)
(node:40605) ExperimentalWarning: buffer.Blob is an experimental feature. This feature could change at any time

而从v18.0.0起,就能够不运用这个flag符号,直接运用Fetch API了。仅仅仍有正告呈现:

> node index.js
Node: v18.0.0
(node:44974) ExperimentalWarning: The Fetch API is an experimental feature. This feature could change at any time
(Use `node --trace-warnings ...` to show where the warning was created)

在Fetch API的MDN页面的浏览器支撑状况里,也把Node.js给加了进去:

Node.js在哪个版别起能够运用原生Fetch API?

那么什么时候Fetch API开端安稳下来呢?

答案是:v21

详见Node.js官方的发版说明

Node.js在哪个版别起能够运用原生Fetch API?

这次什么正告都没有了:

> node index.js
Node: v21.0.0

从这个版别起,咱们就能够彻底脱节axiosnode-fetch这些第三方包了。

以上测试代码为:

const getPosts = async () => {
  const res = await fetch("https://jsonplaceholder.typicode.com/posts");
  const data = await res.json();
  console.log(data[0].title);
};
console.log("Node:", process.version);
getPosts();

TIPS

尽管从Node.js v18起就能够运用Fetch API,但咱们尽可能运用新版别的Node.js,比如在2月14日(情人节当天),Node.js的新版别还修正了一个缝隙

Node.js在哪个版别起能够运用原生Fetch API?

缝隙是这样的:

Node.js在哪个版别起能够运用原生Fetch API?

之前版别还修正过这些缝隙:

Node.js在哪个版别起能够运用原生Fetch API?

总结

Node.js的Fetch APIv17.5.0v16.15.0起,需求额定的--experimental-fetch符号才干启用。从v18起能够直接运用而无需开启flag,但仍有正告提示,直到v21才正式安稳下来,不再产生正告。值得注意的是,Node.js在近期还修正过相关的缝隙,运用者需求额定重视,尽可能选用最新安稳版别。