【发布时间】:2021-10-24 19:24:50
【问题描述】:
我正在对 nextjs 项目进行一些优化,并且需要在package.json 文件中添加type: 'module'。但是后来报错了
错误 [ERR_REQUIRE_ESM]:必须使用导入来加载 ES 模块: 不支持 ES 模块的 my_path/next.config.js require()。
似乎 next.config.js 还不支持 ESM。 这个问题已经在这里讨论过:https://github.com/vercel/next.js/issues/9607 但我还可以找到解决方案。 有帮助吗?
我正在使用:
node v12.17.0
next 11.1.0
这是我的 next.config.js
import withLess from '@zeit/next-less'
const nextConfig = {
target: 'serverless',
productionBrowserSourceMaps: true,
webpack5: true,
onDemandEntries: {
maxInactiveAge: 1000 * 60 * 60,
pagesBufferLength: 5
},
lessLoaderOptions: {
javascriptEnabled: true
},
trailingSlash: false,
}
export default withLess(nextConfig)
我的 package.json 文件
{
"type": "module"
...
}
更新:
我优化的是改变从'ant'包调用组件的方式。
表格
import { Row, Col } from 'antd'
到
import Row from 'antd/es/row'
import Col from 'antd/es/col'
然后导致这个错误
my_path/node_modules/antd/es/row/index.js:1
从'../grid'导入{行}; ^^^^^^
SyntaxError: 不能在模块外使用 import 语句
我通过在package.json 中添加type: "module" 解决了这个问题,但next.config.js 文件有问题
【问题讨论】:
-
也许这对你有帮助? stackoverflow.com/questions/65974337/…
-
“我正在对 Next.js 项目进行一些优化,需要 type: 'module'” -- 我能知道你指的是什么优化吗?因为恕我直言,只有与您的自定义服务器相关的文件不会被 babel/webpack 处理,因此默认情况下不支持 ESM 语法,但只需将它们的扩展名更改为
.mjs即可。有什么必要先修改package.json表示type: module? -
@brc-dd 在帖子中更新
-
@bird 所以我猜你这样做是因为出于某些原因
antd的摇树不适合你。对吗? -
@brc-dd 是的,对。我正在尝试另一种方式。这就是配置 webpack
标签: javascript node.js next.js