React 个人博客 集成 MDX / tailwindcss/typography

2023年 7月 26日 83.4k 0

blog_blog.png

blog_dark.png

blog_light.png

onlion rick-chou.github.io/react-aweso…

代码地址 github.com/rick-chou/o…

博客系列文章

  • React个人博客 初始化

  • React个人博客 时序图

  • React个人博客 集成 Vue Music Player

  • React个人博客 集成 MDX / tailwindcss/typography

第一版的方案用的是 vite-plugin-markdown 用的是 beta 版本

"vite-plugin-markdown": "^2.2.0-2",

import { Mode, plugin as md } from 'vite-plugin-markdown';

// vite plugin
md({ mode: [Mode.HTML, Mode.MARKDOWN, Mode.REACT, Mode.TOC] }),

然后用 tailwind 的 @tailwindcss/typography plugin

import { html } from 'README.md';

;

其实整体下来效果还不错 可参考 @tailwindcss/typography Live Demo

现在的方案是接入 @mdx-js/react

一方面它支持 jsx 语法

另一方面可以用它的社区插件实现更多的定制化的功能

import mdx from '@mdx-js/rollup';
// 实现代码高亮
import rehypeHighlight from 'rehype-highlight';
// 给代码块添加props 例如添加文件名
import rehypeMdxCodeProps from 'rehype-mdx-code-props';
// 支持类似Github Markdown语法
import remarkGfm from 'remark-gfm';

// plugin
  mdx({
    jsxImportSource: '@emotion/react',
    providerImportSource: '@mdx-js/react',
    remarkPlugins: [remarkGfm],
    rehypePlugins: [rehypeHighlight, rehypeMdxCodeProps],
  }),

改写 Article 组件 添加 not-prose class 类名可以告诉 tailwind 这里不需要 typography 插件的样式

import { MDXProvider } from '@mdx-js/react';
import { type FC, type PropsWithChildren } from 'react';
import { codeBlockStyle, codeBtnStyle, codeFilename } from './style';
import './theme.scss';

const Article: FC = ({
  children,
  classname = '',
}) => {
  return (
    
       ,
          pre(props: any) {
            return (
              
                
                  
                    
                    
                    
                    
                      {props.filename ??
                        props?.children?.props?.className?.split('-').at(-1)}
                    
                  
                  
                
              
            );
          },
        }}>
        {children}
      
    
  );
};

export default Article;

因为项目中引用了 tailwindcss

corePlugins: {
  preflight: true,
}

且在配置中除去了默认样式 所以还得用 @tailwindcss/typography 包一层

相关文章

JavaScript2024新功能:Object.groupBy、正则表达式v标志
PHP trim 函数对多字节字符的使用和限制
新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
为React 19做准备:WordPress 6.6用户指南
如何删除WordPress中的所有评论

发布评论