Error: Must use import to load ES Module: D:\node_modules\react-markdown\index.js require() of ES modules is not supported
Error: Must use import to load ES Module: D:\node_modules\react-markdown\index.js require() of ES modules is not supported
目前我正在使用 "react": "17.0.2"
并且我已经通过 npm i react-markdown
安装了 "react-markdown": "^7.0.1"
我正在使用 this package 来显示我从中获取的富文本我的 Strapi CMS。我使用了以下代码来显示内容:
import ReactMarkdown from "react-markdown";
export default function name({ posts }) {
return (
<>
<div>
<div>
{posts.Title}
</div>
</div>
<div>
<ReactMarkdown source={posts.Content} escapeHtml={false} />
</div>
</>
);
}
export async function getStaticProps() {
const res = await fetch("http://localhost:1337/blogs");
const posts = await res.json();
return {
props: { posts },
};
}
但是当我 运行 这样做时,它给了我以下错误:
我正在使用节点 v14.17.0
并尝试添加 "type": "module"
。
我的package.json:
{
"name": "passportlegacy",
"version": "0.1.0",
"private": true,
"scripts": {
"dev": "next dev",
"build": "next build",
"start": "next start",
"lint": "next lint"
},
"dependencies": {
"axios": "^0.21.1",
"babel-plugin-inline-react-svg": "^2.0.1",
"next": "11.0.1",
"next-images": "^1.8.1",
"react": "17.0.2",
"react-dom": "17.0.2",
"react-map-gl": "^6.1.16",
"react-markdown": "^7.0.1",
},
"devDependencies": {
"@svgr/webpack": "^5.5.0",
"@types/react": "17.0.16",
"eslint": "7.32.0",
"eslint-config-next": "11.0.1",
"typescript": "4.3.5"
}
}
Node 当前正在将您的 .js
文件视为 CommonJS。您需要告诉 Node 将其视为 ES 模块。
尝试在您的 package.json
文件中添加 "type": "module"
。
您可以将其放置在顶层的任何位置。例如:
{
"name": "passportlegacy",
"version": "0.1.0",
"type": "module",
"private": true,
"scripts": {
...
}
...
}
更多信息:package.json and file extensions - Node.js 14.x LTS documentation
我通过将 react-markdown 固定到版本 6 解决了这个问题。
在第 7 版的 react-markdown 中,他们只转移到了 ESM。截至 2021 年 10 月,here, but it seems Jest (version 27) still only has experimental support 对纯 ESM 模块的含义进行了解释。我无法在我的项目中使用它,react-markdown 版本 6 目前运行良好。
我认为 Jest 的下一个主要版本(版本 28)可能会支持 ESM。
使用这个版本
"dependencies": {
"react-markdown": "^6.0.0"
}
然后发布
npm install
目前我正在使用 "react": "17.0.2"
并且我已经通过 npm i react-markdown
安装了 "react-markdown": "^7.0.1"
我正在使用 this package 来显示我从中获取的富文本我的 Strapi CMS。我使用了以下代码来显示内容:
import ReactMarkdown from "react-markdown";
export default function name({ posts }) {
return (
<>
<div>
<div>
{posts.Title}
</div>
</div>
<div>
<ReactMarkdown source={posts.Content} escapeHtml={false} />
</div>
</>
);
}
export async function getStaticProps() {
const res = await fetch("http://localhost:1337/blogs");
const posts = await res.json();
return {
props: { posts },
};
}
但是当我 运行 这样做时,它给了我以下错误:
我正在使用节点 v14.17.0
并尝试添加 "type": "module"
。
我的package.json:
{
"name": "passportlegacy",
"version": "0.1.0",
"private": true,
"scripts": {
"dev": "next dev",
"build": "next build",
"start": "next start",
"lint": "next lint"
},
"dependencies": {
"axios": "^0.21.1",
"babel-plugin-inline-react-svg": "^2.0.1",
"next": "11.0.1",
"next-images": "^1.8.1",
"react": "17.0.2",
"react-dom": "17.0.2",
"react-map-gl": "^6.1.16",
"react-markdown": "^7.0.1",
},
"devDependencies": {
"@svgr/webpack": "^5.5.0",
"@types/react": "17.0.16",
"eslint": "7.32.0",
"eslint-config-next": "11.0.1",
"typescript": "4.3.5"
}
}
Node 当前正在将您的 .js
文件视为 CommonJS。您需要告诉 Node 将其视为 ES 模块。
尝试在您的 package.json
文件中添加 "type": "module"
。
您可以将其放置在顶层的任何位置。例如:
{
"name": "passportlegacy",
"version": "0.1.0",
"type": "module",
"private": true,
"scripts": {
...
}
...
}
更多信息:package.json and file extensions - Node.js 14.x LTS documentation
我通过将 react-markdown 固定到版本 6 解决了这个问题。
在第 7 版的 react-markdown 中,他们只转移到了 ESM。截至 2021 年 10 月,here, but it seems Jest (version 27) still only has experimental support 对纯 ESM 模块的含义进行了解释。我无法在我的项目中使用它,react-markdown 版本 6 目前运行良好。
我认为 Jest 的下一个主要版本(版本 28)可能会支持 ESM。
使用这个版本
"dependencies": {
"react-markdown": "^6.0.0"
}
然后发布
npm install