让contentlayer帮你把md文件变成静态页面吧
Contentlayer 是什么
Contentlayer 是一个功能强大的静态网站生成器,专为构建和管理静态页面、网站和博客而设计。它提供了一种简单而灵活的方式来创建和组织内容,可以将Markdown
文件转换为静态HTML
页面。
Contentlayer 有什么用
- 内容建模: Contentlayer 有一个配置文件,你可以定义不同类型的内容,如文章、页面、作者等,并为每个类型定义字段和关联关系。
- Markdown支持: Contentlayer 使用
Markdown
文件作为内容源,它可以把你写的MDX
文件解析为HTML
,并生成静态页面或嵌入到其他静态页面中。 - 静态网站生成: 如上所述,你也可以利用
Markdown
支持轻松生成和更新你的静态网站。 - 自定义渲染: Contentlayer 允许你自定义
React
组件来替换或扩展默认的Markdown渲染器,以实现更多你想要的样式。
使用步骤
Contentlayer 使用方法乍一看容易一头雾水,用完之后又容易忘记一些细节,所以需要记录下使用步骤。
以下示例基于NextJS 13.x
版本的app router
实现。
- 安装依赖
再安装几个markdown插件,这些插件可以增强markdown渲染样式,并非每个都需要,挑自己需要的安装,也可以全部安装慢慢享用
如果你想问这些rehype
和remark
插件都是什么作用,请猛击👉一些好用的Markdown优化插件
-
创建Contentlayer配置文件,定义内容模型和数据源
在你的Next.js项目根目录下创建一个名为**
contentlayer.config.js
**的文件,并开始定义内容模型和配置选项。在配置文件中,你可以定义不同类型的内容,如文章、页面等,并为每个类型定义字段和关联关系。上代码和注释:
-
添加styles/mdx.css
这不是必须的,作用是定义样式规则,用于美化渲染后的代码块
-
编辑
tsconfig.json
"paths"
字段用于配置模块解析的路径映射"include"
字段用于指定要包含在编译过程中的文件或目录在这两个字段里添加
contentlayer
的配置 -
用
withContentLayer
更新next config配置先把
next.config.js
改为next.config.mjs
以支持ES import
-
配置基本完成了,现在开始写md渲染组件
创建
components/mdx
文件夹,在里面分别创建callout.tsx
mdx-card.tsx
mdx-components.tsx
三个文件。最后markdown
页面好不好看全靠这三个文件了 -
开始写
mdx
文件根据
Contentlayer
配置文件的配置,现在在根目录创建一个content
文件夹,在里面创建一个about
文件夹,在about
里创建两个mdx
文件,分别叫terms.mdx
和privacy.mdx
, -
在
app
文件夹内创建路由文件从
app
开始,创建出这样的路径:app/(about)/[…slug]/page.tsx
如果你想给
mdx
文件页面设置布局,在(about)
文件夹下添加一个layout.tsx
写一下布局,这里仅提供page.tsx
文件的代码 -
运行代码
此时执行
npm run dev
会发现报错了,是的,还得修改启动命令和打包命令现在执行启动命令,根目录会出现
.contentlayer
文件夹,如果里面的文件夹结构是图片这样的:那就说明以上配置全部正确。
如果没有出现
.contentlayer
文件夹,说明包版本不匹配,可以到这个issuss来看大家的经验:contentlayer/issues/415,next@13.3.0
版本下,安装contentlayer@0.3.3
和next-contentlayer@0.3.3
是可以使用的。 -
配置一下忽视
.contentlayer
文件夹修改
.prettierignore
和.gitignore
全部配置完成!如果你有新的页面想用mdx来写,只要在content里添加文件就可以。
配置过程有点烦,但是配置完成后是真的香。
和React-markdown有什么区别
有了以上的经验,再看contentlayer
和react-markdown
的区别,可以看出来contentlayer
是页面级别的工具,而react-markdown
是组件级别的工具。
当你的项目有多个md文件时,用contentlayer
显然性价比更高,因为使用react-markdown
除了要写md文件,还要写一个页面组件包裹起来。
而当你需要在组件级别使用md格式,那么要果断使用react-markdown
。
源码与演示
源码:👉contentlayer
在线演示:👉Contentlayer MDX演示
专栏资源
专栏介绍:以实战的角度进行Next.js生态圈的技术栈分享,内容包括但不限于:Next.js理论知识、功能模块设计思路、实战中使用到的技术栈。这是一个长期更新的专栏,我会持续把自己的思考和经验提炼分享出来,欢迎关注我的专栏👇
专栏地址:👉Next.js生态圈实战
专栏演示站:👉Next.js Demos
专栏源码仓库:👉Github - Source Code
交个朋友:👉加入「独立全栈交流群」