在 Next.js App目录中使用 Code Hike

安装

首先安装 next 和 react:

npm install next react react-dom

然后还要安装下一个 mdx 插件、mdx 加载器和 Code Hike。

npm install @next/mdx @mdx-js/loader @code-hike/mdx

在项目的根目录下创建一个 next.config.js 文件。

我们使用插件 @next/mdx 来设置 MDX 导入。

withMDX 函数内部,我们传递下一个JS配置。如果要直接在目录中写入 MDX 文件,请确保在 "md" pageExtensions 设置中包含 和 "mdx"pages

const withMDX = require("@next/mdx")({
  extension: /\.mdx?$/,
  options: {
    remarkPlugins: [],
  },
})

module.exports = withMDX({
  pageExtensions: [
    "ts", "tsx", "js", 
    "jsx", "md", "mdx"
  ],
})

完成此步骤后,您可以在项目中使用 MDX 文件,但还不能使用 Code Hike。

要设置 Code Hike,您需要导入 @code-hike/mdx 插件,并将其添加到文件中的 remarkPlugins next.config.js 数组中。

在插件旁边,您可以传递一个配置对象。几乎总是你会想通过那里 theme 。有关主题的更多信息,请参阅主题文档

const {
  remarkCodeHike,
} = require("@code-hike/mdx")

const withMDX = require("@next/mdx")({
  extension: /\.mdx?$/,
  options: {
    remarkPlugins: [
      [remarkCodeHike, { theme: "nord" }]
    ],
  },
})

module.exports = withMDX({
  pageExtensions: [
    "ts", "tsx", "js", 
    "jsx", "md", "mdx"
  ],
})

您还可以传递更多选项,例如 lineNumbers 。有关详细信息,请参阅配置文档

在 ContentLayer 中使用

Contentlayer 是一个内容预处理器,可将 MDX 文件转换为类型安全的 JSON,您可以轻松地导入到应用程序中。

Code Hike + Contentlayer 的演示可在 GitHub 上找到。您也可以在StackBlitz上的浏览器中试用它。

我们将它与Next.js一起使用,所以让我们从安装它开始:

npm install react react-dom next

我们还需要 Contentlayer 及其插件的依赖项:

npm install contentlayer next-contentlayer

当然,我们需要Code Hike:

npm install @code-hike/mdx

配置 contentlayer.config.js

import { remarkCodeHike } from "@code-hike/mdx"

const Post = defineDocumentType(() => ({
  name: "Post",
  filePathPattern: `**/*.mdx`,
  contentType: "mdx",
}))
export default makeSource({
  contentDirPath: "posts",
  documentTypes: [Post],
  mdx: {
    remarkPlugins: [
      [remarkCodeHike, { theme: "nord" }],
    ],
  },
})

FAQ

我正在使用MDXContentlayer,代码高亮提示我正在使用精彩的Code Hike库。

Next.js 13 在使用内容层和应用程序目录时遇到了一些问题,但此问题已在 Next.js 的 13.0.3 版本中修复。

但是当我尝试集成Code Hike时,应用程序失败并显示以下错误 TypeError: ke.createContext is not a function

我们可以通过将 Markdown 组件作为客户端组件来修复错误:

"use client";

import { useMDXComponent } from "next-contentlayer/hooks";

type Props = {
  code: string;
};

const Markdown = ({ code }: Props) => {
  const MDXComponent = useMDXComponent(code);
  return (
    <div className="prose prose-zinc">
      <MDXComponent />
    </div>
  );
};

export default Markdown;

重要的部分是第一行。使 use client 组件成为客户端组件。有了这个单独的组件,我们就可以使用Code Hike。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Willin 老王带你躺平养老

感谢你这么好看还这么慷慨

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值