我正在使用next-mdx-remote制作博客,并希望在.mdx
文件夹外的文件中使用图像public/
。
这是我的博客项目的完整代码→ https://github.com/deadcoder0904/blog-mdx-remote
我有以下文件夹结构:
.
├── package-lock.json
├── package.json
├── pages
│ ├── _app.js
│ ├── blog
│ │ └── [slug].js
│ ├── dark.css
│ ├── index.js
│ └── new.css
├── posts
│ ├── blog
│ │ ├── hello-world
│ │ │ ├── Rustin_Cohle.jpg
│ │ │ └── index.mdx
│ │ └── shit-world
│ │ └── index.mdx
│ └── tutorials
│ └── console-log-in-javascript
│ └── index.mdx
└── utils
└── mdxUtils.js
我的所有内容都在posts/
文件夹中。
我有 2 个文件夹:blog/
&tutorials/
每个帖子都在它们自己的文件夹中,blog/
或者tutorials/
每个文件夹都包含在该特定帖子中使用的图像。
例如,在hello-world
文件夹中,有 1 张名为Rustin_Cohle.jpg
.
我想在hello-world/index.mdx
文件中使用这个图像,但我做不到。
我不能使用import
,或者require
因为它是next-mdx-remote
.
我尝试使用下面使用的自定义组件并将Image
其img
传递给它,hydrate
但它也不起作用。
组件/Image.js
export const Image = ({ src, alt }) => (
<img style={{ backgroundColor: 'red' }} src={src} alt={alt} />
)
页面/博客/[slug].js
import hydrate from 'next-mdx-remote/hydrate'
import { Image } from '../components/Image'
const components = { Image }
const Blog = ({ source, frontMatter }) => {
const content = hydrate(source, { components })
return (
<div>
<h1>{frontMatter.title}</h1>
{content}
</div>
)
}
以下 MDX 文件使用上述Image
组件作为通过hydrate
.
你好世界/index.mdx
---
title: Hello World
date: '2019-09-06T14:54:37.229Z'
tags: ['hello', 'world']
author: John Doe
description: This is the first post
---
Hey this is my first post
![Rustin Cohle](./Rustin_Cohle.jpg)
<img src="./Rustin_Cohle.jpg" alt="Rust Cohle" />
<Image src="./Rustin_Cohle.jpg" alt="Rust Cohle" />
This is the end of the first post
我什至尝试使用MDXProvider
& 它也没有用。
页面/index.js
import { MDXProvider } from '@mdx-js/react'
const components = { Image }
const HomePage = ({ posts }) => {
return (
<MDXProvider components={components}>
...
</MDXProvider>
)
}
那我该如何使用图片呢?我希望它们仅位于特定帖子的文件夹中,例如hello-world
博客仅在hello-world/
文件夹中包含其图像。