首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带ES模块的条件导入( fetch / node-fetch )

带ES模块的条件导入( fetch / node-fetch )
EN

Stack Overflow用户
提问于 2022-07-29 18:32:22
回答 1查看 363关注 0票数 1

我正在编写一个可用于Node应用程序或JavaScript web浏览器应用程序的JS代码。

由于Node 17.5,现在可以使用来自JavaScript的本机fetch API

我想知道是否有一种方法可以为ES模块使用一种条件导入,其工作方式如下:

代码语言:javascript
复制
if fetch exist => use fetch
else import fetch from node-fetch

我试过这样的方法:

代码语言:javascript
复制
if(!fetch) {
    import fetch from 'node-fetch'
}

...
fetch(url).then(res => ...)
...

但它会引发一个错误,名为fetch is undefined。注意:我使用node@18进行了测试

有人想办法解决我的问题吗?

答:

我找到了一种解决方案,这要归功于“积极”的回答:

代码语言:javascript
复制
let fetcher = fetch ?? await import('node-fetch');

然后我使用fetcher作为提取。

如果我将变量重命名为fetch,则会引发一个错误:

代码语言:javascript
复制
Cannot access 'fetch' before initialization

最后,找到了解决此错误的方法:

代码语言:javascript
复制
if(!fetch) {
    const fetch = await import('node-fetch');
}
// else => fetch is already declared
EN

回答 1

Stack Overflow用户

发布于 2022-07-29 19:14:37

import()调用(通常称为动态导入)是一个类似于函数的表达式,它允许异步和动态地将ECMAScript模块加载到潜在的非模块环境中。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/import

因此,这应该对受支持的节点版本执行条件导入:

代码语言:javascript
复制
let fetch = fetch ?? await import('node-fetch')
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73169659

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档