简体   繁体   English

Next.js 上的 ERR_REQUIRE_ESM 和 Package.json 错误。 更新后。 怎么修?

[英]ERR_REQUIRE_ESM and Package.json error on Next.js. after updating. How to fix?

I had taken a LONG break from Node and Next.js to the point that I don't even remember most of the stuff.我从 Node 和 Next.js 中休息了很长时间,以至于我什至不记得大部分内容了。 I thought I'll check on this again, and knowing very well things would break if I updated my packages, I did it anyway.我想我会再次检查这个,并且很清楚如果我更新我的包会破坏,我还是这样做了。 It moved from Next.js 10.0.3 to 11.1.2 now.它现在从 Next.js 10.0.3 移动到 11.1.2。

Error:错误:

ready - started server on 0.0.0.0:3000, url: http://localhost:3000
info  - Loaded env from C:\Users\username\Documents\React-Example\user-site-master\.env.local
info  - Loaded env from C:\Users\username\Documents\React-Example\user-site-master\.env
Error: failed to load next.config.js, see more info here https://nextjs.org/docs/messages/next-config-error
Error [ERR_REQUIRE_ESM]: Must use import to load ES Module: C:\Users\username\Documents\React-Example\user-site-master\next.config.js
require() of ES modules is not supported.
require() of C:\Users\username\Documents\React-Example\user-site-master\next.config.js from C:\Users\username\Documents\React-Example\user-site-master\node_modules\next\dist\server\config.js is an ES module file as it is a .js file whose nearest parent package.json contains "type": "module" which defines all .js files in that package scope as ES modules.
Instead rename next.config.js to end in .cjs, change the requiring code to use import(), or remove "type": "module" from C:\Users\username\Documents\React-Example\user-site-master\package.json.
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1080:13)
at Module.load (internal/modules/cjs/loader.js:928:32)
at Function.Module._load (internal/modules/cjs/loader.js:769:14)
at Module.require (internal/modules/cjs/loader.js:952:19)
at require (internal/modules/cjs/helpers.js:88:18)
at Object.loadConfig [as default] (C:\Users\username\Documents\React-Example\user-site-master\node_modules\next\dist\server\config.js:347:32)
at async NextServer.loadConfig (C:\Users\username\Documents\React-Example\user-site-master\node_modules\next\dist\server\next.js:112:22)
at async NextServer.prepare (C:\Users\username\Documents\React-Example\user-site-master\node_modules\next\dist\server\next.js:94:24)
at async C:\Users\username\Documents\React-Example\user-site-master\node_modules\next\dist\cli\next-dev.js:121:9 { code: 'ERR_REQUIRE_ESM'

Ok, so I renamed next-config.js to.cjs, added a {"type": "module"} to package.json like shown below:好的,所以我将 next-config.js 重命名为.cjs,在 package.json 中添加了一个 {"type": "module"} ,如下所示:

"version": "0.0.1",
 "type": "module",
...

Is this syntax right for type module?这种语法适用于类型模块吗? and now it keeps complaining like this.现在它一直这样抱怨。

Error [ERR_REQUIRE_ESM]: Must use import to load ES Module: C:\Users\username\Documents\React-Example\user-site-master\.next\server\pages\_document.js
require() of ES modules is not supported.
require() of C:\Users\username\Documents\React-Example\user-site-master\.next\server\pages\_document.js from C:\Users\username\Documents\React-Example\user-site-master\node_modules\next\dist\server\require.js is an ES module file as it is a .js file whose nearest parent package.json contains "type": "module" which defines all .js files in that package scope as ES modules.
Instead rename _document.js to end in .cjs, change the requiring code to use import(), or remove "type": "module" from C:\Users\username\Documents\React-Example\user-site-master\package.json.
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1080:13)
    at Module.load (internal/modules/cjs/loader.js:928:32)
    at Function.Module._load (internal/modules/cjs/loader.js:769:14)
    at Module.require (internal/modules/cjs/loader.js:952:19)
    at require (internal/modules/cjs/helpers.js:88:18)
    at Object.requirePage (C:\Users\username\Documents\React-Example\user-site-master\node_modules\next\dist\server\require.js:47:12)
    at Object.loadComponents (C:\Users\username\Documents\React-Example\user-site-master\node_modules\next\dist\server\load-components.js:47:45)
    at DevServer.findPageComponents (C:\Users\username\Documents\React-Example\user-site-master\node_modules\next\dist\server\next-server.js:954:63)
    at DevServer.findPageComponents (C:\Users\username\Documents\React-Example\user-site-master\node_modules\next\dist\server\dev\next-dev-server.js:546:26)
    at processTicksAndRejections (internal/process/task_queues.js:93:5) {
  code: 'ERR_REQUIRE_ESM'
}
Error [ERR_REQUIRE_ESM]: Must use import to load ES Module: C:\Users\username\Documents\React-Example\user-site-master\.next\server\pages\_document.js
require() of ES modules is not supported.
require() of C:\Users\username\Documents\React-Example\user-site-master\.next\server\pages\_document.js from C:\Users\username\Documents\React-Example\user-site-master\node_modules\next\dist\server\require.js is an ES module file as it is a .js file whose nearest parent package.json contains "type": "module" which defines all .js files in that package scope as ES modules.
Instead rename _document.js to end in .cjs, change the requiring code to use import(), or remove "type": "module" from C:\Users\username\Documents\React-Example\user-site-master\package.json.

    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1080:13)
    at Module.load (internal/modules/cjs/loader.js:928:32)
    at Function.Module._load (internal/modules/cjs/loader.js:769:14)
    at Module.require (internal/modules/cjs/loader.js:952:19)
    at require (internal/modules/cjs/helpers.js:88:18)
    at Object.requirePage (C:\Users\username\Documents\React-Example\user-site-master\node_modules\next\dist\server\require.js:47:12)
    at Object.loadComponents (C:\Users\username\Documents\React-Example\user-site-master\node_modules\next\dist\server\load-components.js:47:45)
    at DevServer.findPageComponents (C:\Users\username\Documents\React-Example\user-site-master\node_modules\next\dist\server\next-server.js:954:63)
    at DevServer.findPageComponents (C:\Users\username\Documents\React-Example\user-site-master\node_modules\next\dist\server\dev\next-dev-server.js:546:26)
    at async DevServer.renderErrorToResponse (C:\Users\username\Documents\React-Example\user-site-master\node_modules\next\dist\server\next-server.js:1414:26) {
  code: 'ERR_REQUIRE_ESM'
}
Error [ERR_REQUIRE_ESM]: Must use import to load ES Module: C:\Users\username\Documents\React-Example\user-site-master\.next\server\pages\_document.js
require() of ES modules is not supported.
require() of C:\Users\username\Documents\React-Example\user-site-master\.next\server\pages\_document.js from C:\Users\username\Documents\React-Example\user-site-master\node_modules\next\dist\server\require.js is an ES module file as it is a .js file whose nearest parent package.json contains "type": "module" which defines all .js files in that package scope as ES modules.
Instead rename _document.js to end in .cjs, change the requiring code to use import(), or remove "type": "module" from C:\Users\username\Documents\React-Example\user-site-master\package.json.

    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1080:13)
    at Module.load (internal/modules/cjs/loader.js:928:32)
    at Function.Module._load (internal/modules/cjs/loader.js:769:14)
    at Module.require (internal/modules/cjs/loader.js:952:19)
    at require (internal/modules/cjs/helpers.js:88:18)
    at Object.requirePage (C:\Users\username\Documents\React-Example\user-site-master\node_modules\next\dist\server\require.js:47:12)
    at Object.loadComponents (C:\Users\username\Documents\React-Example\user-site-master\node_modules\next\dist\server\load-components.js:47:45)
    at DevServer.findPageComponents (C:\Users\username\Documents\React-Example\user-site-master\node_modules\next\dist\server\next-server.js:954:63)
    at DevServer.findPageComponents (C:\Users\username\Documents\React-Example\user-site-master\node_modules\next\dist\server\dev\next-dev-server.js:546:26)
    at async DevServer.renderErrorToResponse (C:\Users\username\Documents\React-Example\user-site-master\node_modules\next\dist\server\next-server.js:1414:26) {
  code: 'ERR_REQUIRE_ESM'
}

I tried renaming _document.js to _document.cjs but the error remains.我尝试将 _document.js 重命名为 _document.cjs 但错误仍然存在。 What is going on?到底是怎么回事? I don't understand any of this.我不明白这些。 Can someone please suggest how to fix this?有人可以建议如何解决这个问题吗?

Also, why do developers introduce these type of issues between code updates?另外,为什么开发人员会在代码更新之间引入这些类型的问题? Can't they understand these things might break and introduce some sort of back-level support?难道他们不能理解这些东西可能会破坏并引入某种后台支持吗?

I am just looking for a temporary fix now just to get this to compile.我现在只是在寻找一个临时修复程序来编译它。 Thanks for your help!谢谢你的帮助!

EDIT: Here's the next-config.js .编辑:这是next-config.js

const readingTime = require('reading-time');
const mdxPrism = require('mdx-prism');
const withMdxEnhanced = require('next-mdx-enhanced');
const isProd = process.env.NODE_ENV === 'production';


module.exports = withMdxEnhanced({
  layoutPath: 'layouts',
  defaultLayout: true,
  remarkPlugins: [
    require('remark-autolink-headings'),
    require('remark-slug'),
    require('remark-code-titles'),
    require('./utils/title-style')
  ],
  rehypePlugins: [mdxPrism],
  extendFrontMatter: {
    process: (mdxContent) => ({
      wordCount: mdxContent.split(/\s+/gu).length,
      readingTime: readingTime(mdxContent)
    })
  }
})({
  webpack: (config, { isServer }) => {
    if (isServer) {
      require('./scripts/generate-sitemap');
    }

    return config;
  }
});

With next 11 it's necessary to enable ESM compatibility in next.config.js with experimental: { esmExternals: true } .对于next 11,有必要在next.config.js启用 ESM 兼容性与experimental: { esmExternals: true }

However, even with that or using next 12 (ESM enabled by default) the described error will appear:但是,即使使用那个或使用next 12(默认情况下启用 ESM),也会出现所描述的错误:

Error [ERR_REQUIRE_ESM]: require() of ES Module [...]_document.js from [...]node_modules/next/dist/server/require.js not supported.

This error is fixed when removing "type": "module" from package.json .package.json删除"type": "module"修复了错误 Support for using ESM-only node_modules is still fine.支持使用仅限 ESM 的 node_modules 仍然很好。

The reason "type": "module" will break the next server is that it's still written in CJS while requiring the compiled files from the local .next folder which is now scoped to ESM. "type": "module"会破坏next服务器的原因是它仍然是用 CJS 编写的,同时需要来自本地.next文件夹的编译文件,该文件夹现在范围为 ESM。 This is expected to fail, so unless the next package is updated to "type": "module" as well this cannot work.这预计会失败,因此除非next包更新为"type": "module" ,否则这将无法工作。

I spent a half day to find a solution to fix this but at the end, i found a simple way... we just need to upgrade Next.js version to 12. Please upgrade Next.js version to 12 to fix ESM issue.我花了半天的时间寻找解决此问题的解决方案,但最后,我找到了一个简单的方法……我们只需将 Next.js 版本升级到 12。请将 Next.js 版本升级到 12 以修复 ESM 问题。

npm install next@12

or或者

yarn add next@12

Next.js 12 - ES Modules Support and URL Imports You can read more information here https://nextjs.org/blog/next-12#es-modules-support-and-url-imports Next.js 12 - ES 模块支持和 URL 导入您可以在此处阅读更多信息https://nextjs.org/support-and-url-1import

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 在 Next.js ERR_REQUIRE_ESM 中导入 ES 模块 - Import ES module in Next.js ERR_REQUIRE_ESM 如何修复代码:'ERR_REQUIRE_ESM' const { nanoid } = require("nanoid"); - HOW TO FIx code : 'ERR_REQUIRE_ESM' const { nanoid } = require("nanoid"); 错误 [ERR_REQUIRE_ESM]:ES 模块的 require() - Error [ERR_REQUIRE_ESM]: require() of ES Module Swagger-JSdoc 不适用于 Node.JS 14.15.4 错误“ERR_REQUIRE_ESM” - Swagger-JSdoc is not working on Node.JS 14.15.4 error 'ERR_REQUIRE_ESM' 错误 [ERR_REQUIRE_ESM] Github 部署错误 - Error [ERR_REQUIRE_ESM] Github deploy error PM2 带 ES 模块。 错误:ERR_REQUIRE_ESM - PM2 with ES module. Error: ERR_REQUIRE_ESM 错误 [ERR_REQUIRE_ESM]:如何在节点 12 中使用 es6 模块? - Error [ERR_REQUIRE_ESM]: How to use es6 modules in node 12? 将 D3.js 7.0.0 与 Next.js 11.0.1 一起使用时,如何解决“[ERR_REQUIRE_ESM]:必须使用导入加载 ES 模块”的问题? - How do I resolve "[ERR_REQUIRE_ESM]: Must use import to load ES Module" when using D3.js 7.0.0 with Next.js 11.0.1? 错误 [ERR_REQUIRE_ESM]: 使用 SSR (Inertiajs) 时需要 ES 模块 - Error [ERR_REQUIRE_ESM]: require() of ES Module while using SSR (Inertiajs) 错误 [ERR_REQUIRE_ESM]:不支持来自 /app/commands/Image/meme.js 的 ES 模块 /app/node_modules/got/dist/source/index.js 的 require() - Error [ERR_REQUIRE_ESM]: require() of ES Module /app/node_modules/got/dist/source/index.js from /app/commands/Image/meme.js not supported
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM