如何在CommonJS模块中导入ESM格式的Got库?遇Not Supported错误
问题根源
你这问题核心出在两点:
- Node.js版本不兼容:Got 13.0.0是纯ESM库,官方要求Node.js至少14.16.0,你用的12.14.1版本根本达不到最低要求,这是报错的主要原因;
- 就算Node版本够,Node.js 12里CommonJS用动态
import()还是实验性功能,得额外配置才行。
解决办法
办法1:降级Got到支持CommonJS的版本(最省事)
Got 11及更早版本同时支持CommonJS和ESM,直接装旧版本就行,不用改项目结构:
npm install got@11
之后直接用CommonJS的方式引入:
const got = require('got');
办法2:升级Node.js+适配动态import(想用Got 13的话)
- 先把Node.js升到14.16.0或更高版本,满足Got 13的要求;
- 在CommonJS里用动态
import()时,要手动提取ESM的默认导出:
HTTPRequestV2.prototype.init = async function(){ const gotModule = await import('got'); wrappedgot = gotModule.default; // ESM库的默认导出得单独拿出来 };
Node 14及以上不用加额外启动flag,动态import已经稳定支持了。
办法3:用包装文件中转(没法升级Node的情况)
如果实在不能升级Node,就建个ESM包装文件(比如got-wrapper.mjs):
import got from 'got'; export default got;
然后启动Node的时候加--experimental-modules flag:
node --experimental-modules 你的入口文件.js
代码里这么写:
HTTPRequestV2.prototype.init = async function(){ wrappedgot = await import('./got-wrapper.mjs').then(m => m.default); };
不过这种方式在Node 12里可能有稳定性问题,尽量优先选前两种办法。
内容的提问来源于stack exchange,提问作者Vipresh
相关产品推荐
相关产品推荐

