我正在编写一个可用于Node应用程序或JavaScript web浏览器应用程序的JS代码。
由于Node 17.5,现在可以使用来自JavaScript的本机fetch API。
我想知道是否有一种方法可以为ES模块使用一种条件导入,其工作方式如下:
if fetch exist => use fetch
else import fetch from node-fetch我试过这样的方法:
if(!fetch) {
import fetch from 'node-fetch'
}
...
fetch(url).then(res => ...)
...但它会引发一个错误,名为fetch is undefined。注意:我使用node@18进行了测试
有人想办法解决我的问题吗?
答:
我找到了一种解决方案,这要归功于“积极”的回答:
let fetcher = fetch ?? await import('node-fetch');然后我使用fetcher作为提取。
如果我将变量重命名为fetch,则会引发一个错误:
Cannot access 'fetch' before initialization最后,找到了解决此错误的方法:
if(!fetch) {
const fetch = await import('node-fetch');
}
// else => fetch is already declared发布于 2022-07-29 19:14:37
import()调用(通常称为动态导入)是一个类似于函数的表达式,它允许异步和动态地将ECMAScript模块加载到潜在的非模块环境中。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/import
因此,这应该对受支持的节点版本执行条件导入:
let fetch = fetch ?? await import('node-fetch')https://stackoverflow.com/questions/73169659
复制相似问题