Как изменить относительный путь ссылки Markdown как предварительную обработку gatsby-transformer-notes
Я разрабатываю статический блог, используя Гэтсби. Это использовать gatsby-transformer-remark
а также gatsby-plugin-i18n
Плагин для поддержки нескольких языков.
Я управляю статьями в репозитории GitHub следующим образом.
- / блог
- / 2017
- / 06
- 01-foo.en.md
- 01-foo.zh.md
- / 09
- 01-bar.en.md
- 01-bar.zh.md
- / 06
- / 2017
И ссылки между статьями необходимы. Поэтому, чтобы не стать мертвой ссылкой при просмотре GitHub с помощью веб-браузера, мы настроили ссылку следующим образом.
[link](/blog/2017/09/01-bar.en.md)
Тем не менее, это имеет проблему мертвых ссылок при отображении с помощью Gatsby. Потому что URL в фактически сгенерированном браузере выглядит следующим образом.
/[gatsby-config.pathPrefix]/en/blog/2017/09/01-bar
Итак, когда я бегу gatsby build
или же gatsby develop
Я хочу заменить ссылки между статьями, используя регулярные выражения, в качестве предварительной обработки для анализа Markdown gatsby-transformer-remark
,
Как я могу сделать выше?
Добавлено: 2 февраля
Я также попробовал относительные ссылки.
[link](../09/01-bar)
Но URL-адрес /[gatsby-config.pathPrefix]/en/blog/2017/06/09/01-bar
, который является мертвой ссылкой. Потому что Гэтсби делает HTML место для /[gatsby-config.pathPrefix]/en/blog/2017/06/09/01-bar/index.html
,
Итак, я добавил ../
еще раз. И это сработало. Однако с этим есть некоторые проблемы.
- Я не могу перейти от Markdown в GitHub к другому Markdown. Потому что относительный путь отличается.
- Кроме того, он не может перемещаться без добавления суффикса языка (например,
01-bar.en.md
), но когда я его добавляю, Гэтсби на этот раз не может быть распознан, и отображаются 404 или необработанная уценка.
1 ответ
Вы можете создать плагин для gatsby-transformer-notes
plugins/gatsby-remark-relative-linker/index.js
:
const visit = require('unist-util-visit');
module.exports = ({ markdownAST }) => {
visit(markdownAST, 'link', node => {
if (
node.url &&
!node.url.startsWith('//') &&
!node.url.startsWith('http') &&
node.url.startsWith('/')
) {
node.url = node.url.replace(/(.*)\.(\w{2}).md(#.*)?$/, (match, base, language, hash) => {
return `/${language}${base}${hash}`
})
}
});
return markdownAST;
};
plugins/gatsby-remark-relative-linker/package.json
:
{}
./gatsby-config.js
:
{
...
plugins: [
{
resolve: 'gatsby-transformer-remark',
options: {
plugins: [
...
'gatsby-remark-relative-linker',
],
}
}
},
Здесь я удаляю .md
из URL и префикса языка. Сохраняйте свои URL как в уценке, начиная с /
лайк [text](/blog/2017/09/01-bar.en.md)