dan*_*maq 2 markdown gatsby remarkjs
我正在使用Gatsby开发一个静态博客。它使用gatsby-transformer-remark和gatsby-plugin-i18n插件来支持多种语言。
我正在按以下方式管理GitHub存储库中的文章。
并且文章之间的链接是必要的。因此,为了避免在使用Web浏览器查看GitHub时出现死链接,我们建立了如下链接。
[link](/blog/2017/09/01-bar.en.md)
Run Code Online (Sandbox Code Playgroud)
但是,当使用Gatsby显示时,这会出现链接失效的问题。因为实际生成的浏览器中的URL如下。
/[gatsby-config.pathPrefix]/en/blog/2017/09/01-bar
Run Code Online (Sandbox Code Playgroud)
因此,当我运行gatsby build或时gatsby develop,我想使用正则表达式替换文章之间的链接,作为通过进行Markdown分析的预处理gatsby-transformer-remark。
我该怎么做?
添加:2月2日
我也尝试了相对链接。
[link](../09/01-bar)
Run Code Online (Sandbox Code Playgroud)
但是URL是/[gatsby-config.pathPrefix]/en/blog/2017/06/09/01-bar,这是无效链接。因为Gatsby将HTML放置为/[gatsby-config.pathPrefix]/en/blog/2017/06/09/01-bar/index.html。
因此,我../再次添加了。而且有效。但是,这有一些问题。
01-bar.en.md),它就无法导航,但是当我添加语言后缀时,这次无法识别Gatsby,并显示404或原始Markdown。小智 5
您可以为gatsby-transformer-remark创建一个插件
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;
};
Run Code Online (Sandbox Code Playgroud)
plugins/gatsby-remark-relative-linker/package.json:
{}
Run Code Online (Sandbox Code Playgroud)
./gatsby-config.js:
{
...
plugins: [
{
resolve: 'gatsby-transformer-remark',
options: {
plugins: [
...
'gatsby-remark-relative-linker',
],
}
}
},
Run Code Online (Sandbox Code Playgroud)
在这里,我.md从网址中删除,并为语言添加前缀。将您的网址保留为markdown开头,/例如[text](/blog/2017/09/01-bar.en.md)
| 归档时间: |
|
| 查看次数: |
1375 次 |
| 最近记录: |