我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...

截至到发稿,node-fetch已经升级4系列,但是都是测试版。node-fetch@3系列已经做了较大的改变,引入方式已经发生了较大变化。如果还使用原来的require方式进行加载的话,就会报错。

苏南大叔:nodejs代码,node-fetch升级到3/4系列后,该如何使用? - node-fetch-2-hero
nodejs代码,node-fetch升级到3/4系列后,该如何使用?(图4-1)

大家好,这里是苏南大叔的平行空间笔记本博客,这里讲述苏南大叔和计算机代码的故事。本文描述在nodejs代码中,使用node-fetch@3的方式。测试环境:win10node@16.14.2node-fetch@3.2.8

前情回顾

在前面的文章里面,测试环境是node-fetch@2系列。引入方式是:

const fetch = require('node-fetch');

参考文章:

苏南大叔:nodejs代码,node-fetch升级到3/4系列后,该如何使用? - 错误截图
nodejs代码,node-fetch升级到3/4系列后,该如何使用?(图4-2)

但是,node-fetch升级后,无法这样使用。报错信息如下:

require() of ES Module C:\Users\sunan\node_modules\node-fetch\src\index.js from C:\Users\sunan\Desktop\fetch\test.js not supported.
Instead change the require of index.js in C:\Users\sunan\Desktop\fetch\test.js to a dynamic import() which is available in all CommonJS modules.
    at Object.<anonymous> (C:\Users\sunan\Desktop\fetch\test.js:2:15) {
  code: 'ERR_REQUIRE_ESM'
}

解决方案

nodejs引入模块的方式,有两种。一个是commonjs,另外一种是module

版本号使用方式代码
node-fetch@2commonjsconst fetch = require('node-fetch');
node-fetch@3moduleimport fetch from 'node-fetch';

所以,对于node-fetch@3系列。正确的使用方式是:
首先,需要开启module模式,开启的方式有两种,这里选择最简单的方式,使用.mjs文件。更多开启方式,请参考:

其次,修改node-fetch模块的引入方式,参考代码如下:

import fetch from 'node-fetch';
console.log(typeof fetch);

输出内容:

function

苏南大叔:nodejs代码,node-fetch升级到3/4系列后,该如何使用? - 正确的代码
nodejs代码,node-fetch升级到3/4系列后,该如何使用?(图4-3)

更多使用方式

剩下的代码使用方式,和原来的差不多。参考测试代码如下:

import fetch from 'node-fetch';
console.log(typeof fetch);
fetch("https://api.github.com/users/github")
    .then(function(response) {
        console.log("01");
        return response.json(); // return到第二个then里面
    })
    .then(function(data) {
        console.log("02");
        console.log(data);
    })
    .catch(function(e) {
        console.log("Oops, error");
    });

更多测试代码,请参考:

查看可以版本

可以使用下面的方法,查看可用的版本。相关文章:

npm view node-fetch versions --json

苏南大叔:nodejs代码,node-fetch升级到3/4系列后,该如何使用? - node-versions
nodejs代码,node-fetch升级到3/4系列后,该如何使用?(图4-4)

相关文章

综述

说了半天,其实真相很简单。就是node-fetch@3是需要使用module方式的import导入的。同时,需要开启nodejsmodule支持,大概就是这个意思。更多node的相关文章,请参考:

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   node