我在Next.js项目中尝试使用ky
时遇到了这个错误:
错误[错误请求ESM]:必须使用导入来加载ES模块:/foo/node_modules/ky/index.js
我认为问题在于Webpack(或Babel)正在将所有的import
转换为require()
,但ky
is a pure ES module除外。
我通过在使用它之前动态导入ky
来使它工作,但它既不优雅也不高效。
const handleFormSubmit = async (event) => {
const ky = (await import("ky")).default;
const response = await ky
.get('http://localhost/api/foo')
.json();
};
有什么建议吗?
3条答案
按热度按时间nxowjjhe1#
从Next.js 12开始,只要ESM库在其
package.json
中包含"type": "module"
,就默认启用对ES模块的支持,不再需要使用next-transpile-modules
来转换ESM库。在下一个. js 12之前
由于
ky
是作为ESM导出的,因此您可以在next.config.js
中使用next-transpile-modules
传输它。fumotvh32#
您可以尝试将nextjs升级到v11.1.0,它对ESM有一些支持。
参见:https://github.com/vercel/next.js/pull/27069
有关此问题讨论的详细信息,请访问https://github.com/vercel/next.js/issues/9607#issuecomment-906155992
h7appiyu3#
从Next.js 12(官方发布)开始,ESM模块的支持自动启用,参见#29878。
从Next.js 12.1开始,您可以将
"type": "module"
添加到您的package.json
中,请参见#33637。