【发布时间】:2021-06-07 03:58:01
【问题描述】:
我正在使用 Vue 构建一个博客,我希望将我的帖子写成 markdown 文件。
目前我有以下结构
src/
posts/
blogpost1.md
blogpost2.md
view/
myComponent.vue
我希望myComponent.vue 根据路由参数动态加载降价帖子。
例如,如果我们访问了.../blog/blogpost2,那么我们将动态加载blogpost2.md
我目前的实现如下:
<template>
<div
v-html="md"
></div>
</template>
<script>
import marked from "marked";
export default {
data () {
return {
md: undefined,
};
},
created () {
const importRoute = `posts/blog/${this.$route.params.postName}.md`;
const md = require(importRoute);
this.md = marked(md);
},
};
</script>
要加载我在 webpack 中使用 markdown-loader 的降价文件。
我还使用copy-webpack-plugin 尝试将我的整个/posts 目录复制到我的构建文件夹中。
configureWebpack: {
module: {
rules: [{
test: /\.md$/,
use: [
{ loader: "html-loader", options: {} },
{ loader: "markdown-loader", options: {} },
],
},
],
},
plugins: [
new CopyPlugin({
patterns: [
{ from: "src/posts", to: "posts" },
],
}),
],
},
但是,当我运行 npm run serve 时,我收到
[Vue warn]: Error in created hook: "Error: Cannot find module './posts/blogpost2.md'"
当我在浏览器中查看页面时,我看不到 posts 目录(见下图)
但是,在运行 npm run build:staging 时,我确实在 /dist 中看到了 posts 目录
为什么我无法动态导入 import blogpost2.md?
【问题讨论】:
-
考虑使用已经存在的几个 Markdown 站点生成器之一(VuePress、VitePress、Nuxt Content、Gridsome)。不要重新发明轮子:)
-
是的,我正在认真考虑这一点,但首先要尝试诊断为什么这不起作用。我想我在某种程度上误解了 webpack
-
另外值得注意的是,如果我将 blogpost2 的导入引用设为常规字符串,它会成功运行
标签: javascript vue.js webpack