Hacktoberfest 2026:维护者为十月标记出来的 issue,仍然开放、适合新手。 浏览 Hacktoberfest issue

No HMR support and cached content being served for MDX files with imported components

未关闭
#261 6 条评论 2 个 reaction 已指派 0 人 在 GitHub 查看

还没有人认领这个 Issue。

评估

难度
5/5
预计耗时
一周以上
新手友好度
35/100
Issue 类型
缺陷
描述清晰度
基本清楚
活跃度
停滞
技术栈
nextjs, typescript

调研方向

使用 yarn dev 在链接的 contentlayer-mdx-example 中重现该问题,修改 src/components/ExampleComponent.tsxposts/mdx-component-example.mdx;同时检查 tsconfig.json 中的 ES5 情况以及 Button.tsx 中报告的错误。当导入组件的更改会触发 HMR、重启不会提供过时的已编译 MDX,并且文档中的示例能在预期的 TypeScript 目标下正常工作时,即表示完成。

由索引模型根据 Issue 内容生成。

描述

bug pkg/source-files topic: markdown/mdx

Put together an example here: https://github.com/Saeris/contentlayer-mdx-example

Two things I've observed when trying to import and use components within MDX documents:

  1. When an imported component has changes, those changes go undetected, meaning HMR is broken for specifically those components. In the linked example, if you run yarn dev then go to src/components/ExampleComponent.tsx and uncomment line 18, this should cause a reload because the component has been changed. I used inline styles here to make it easy to inspect the HTML to confirm the embedded component doesn't update.
  2. Even after restarting the server, Contentlayer is unable to detect that posts/mdx-component-example.mdx has any changes (technically this is true, the content of this file is unchanged), so it serves the previously compiled version from the cache. You have to manually purge the cache and generated files in order for any changes to imported components to be reflected in the app.

Effectively this makes authoring mdx content quite a chore and is far from intuitive.

Additionally, if you want to import components that themselves have dependencies (in ExampleComponent, I'm importing Button), you can't set "target": "es5", inside of tsconfig.json such as in the official nextjs example, as you'll get a compilation error:

X [ERROR] Transforming const to the configured target environment ("es5") is not supported yet

    ../components/Button.tsx:4:7:
      4 │ export const Button: FC<{
        ╵        ~~~~~

  The target environment was set to "es5" here:

    ../tsconfig.json:3:14:
      3 │     "target": "es5",
        ╵               ~~~~~

X [ERROR] Transforming destructuring to the configured target environment ("es5") is not supported yet

    ../components/Button.tsx:7:6:
      7 │ }> = ({ children, onClick }) => (
        ╵       ^

  The target environment was set to "es5" here:

    ../tsconfig.json:3:14:
      3 │     "target": "es5",
        ╵               ~~~~~

Error: Found 1 problems in 1 documents.

 └── Encountered unexpected errors while processing of 1 documents. This is possibly a bug in Contentlayer. Please open an issue.

     • "mdx-component-example.mdx": UnexpectedMDXError: Error: Build failed with 2 errors:
     ../src/components/Button.tsx:4:7: ERROR: Transforming const to the configured target environment ("es5") is not supported yet
     ../src/components/Button.tsx:7:6: ERROR: Transforming destructuring to the configured target environment ("es5") is not supported yet


SourceFetchDataError: {
  "_tag": "HandledFetchDataError"
}

It would be very helpful if there was an official example of how to use custom components in MDX with Contentlayer. Right now there is little if anything to go off of in the documentation.

主要语言
TypeScript
星标
3.5k
派生
192
PR 合并指标
30 天内没有已合并 PR

贡献指南

打开贡献指南

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

contentlayerdev/contentlayer 的其他 Issue

查看 contentlayerdev/contentlayer 的全部 Issue

相似的 Issue

更多 TypeScript Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。