Example taken from https://github.com/davidroyer/nuxt-markdown-example
Remove the nuxt-markdownit dependencies.
Use the raw loader instead for markdown
config.module.rules.push({
test: /\.md$/,
use: ['raw-loader']
})
Example taken from https://github.com/davidroyer/nuxt-markdown-example
Remove the nuxt-markdownit dependencies.
Use the raw loader instead for markdown
config.module.rules.push({
test: /\.md$/,
use: ['raw-loader']
})
| const pkg = require('./package') | |
| const { join } = require('path') | |
| const dir = require('node-dir') | |
| const routesArray = [] | |
| const fs = require('fs') | |
| const _ = require('lodash') | |
| var files = fs.readdirSync('./static/dynamicMarkdownFiles'); | |
| function createRoutesArray() { | |
| files.forEach(function (file) { | |
| var name = file.substr(0, file.lastIndexOf('.')); | |
| var route = '/post/' + name | |
| routesArray.push(route) | |
| }); | |
| } | |
| function returnRoutes() { | |
| dir.readFiles('./static/dynamicMarkdownFiles', { | |
| match: /.md$/, | |
| shortName: true, | |
| exclude: /^\./ | |
| }, function(err, content, next) { | |
| if (err) throw err; | |
| // console.log('content:', content); | |
| next(); | |
| }, | |
| function(err, files){ | |
| if (err) throw err; | |
| // fileNamesArray = []; | |
| files.forEach(function (file) { | |
| var name = file.substr(0, file.lastIndexOf('.')); | |
| var path = '/post/' + name | |
| return path | |
| }); | |
| }); | |
| } | |
| // const fs = require('fs') | |
| // const axios = require('axios') | |
| // // const _ = require('lodash') | |
| // | |
| function getSlugs(post, index) { | |
| let slug = post.substr(0, post.lastIndexOf('.')); | |
| return `/post/${slug}` | |
| } | |
| // | |
| //const postsArray = require('.//posts.json') | |
| module.exports = { | |
| mode: 'universal', | |
| /* | |
| ** Headers of the page | |
| */ | |
| head: { | |
| title: "Chris Choy - chsquare.com", | |
| meta: [ | |
| { charset: 'utf-8' }, | |
| { name: 'viewport', content: 'width=device-width, initial-scale=1' }, | |
| { hid: 'description', name: 'description', content: pkg.description } | |
| ], | |
| link: [ | |
| { rel: 'icon', type: 'image/x-icon', href: '/favicon.ico' } | |
| ] | |
| }, | |
| generate: { | |
| routes: function() { | |
| return files.map(getSlugs) | |
| // return _.map(routesArray, function(file) { | |
| // let slug = file.substr(0, file.lastIndexOf('.')); | |
| // return `/dynamic/${slug}` | |
| // }) | |
| // return axios.get('~/static/posts.json') | |
| // .then((res) => { | |
| // return _.map(res.data, function(post, key) { | |
| // return `/dynamic/${post.slug}` | |
| // }) | |
| // | |
| // }) | |
| } | |
| }, | |
| /* | |
| ** Customize the progress-bar color | |
| */ | |
| loading: { color: '#fff' }, | |
| /* | |
| ** Global CSS | |
| */ | |
| css: [ | |
| { src: 'node_modules/highlight.js/styles/hopscotch.css', lang: 'css' }, | |
| { src: 'assets/style.css', lang: 'css'}, | |
| { src: 'node_modules/animate.css/animate.css', lang: 'css'} | |
| ], | |
| /* | |
| ** Plugins to load before mounting the App | |
| */ | |
| plugins: [ | |
| ], | |
| /* | |
| ** Nuxt.js modules | |
| */ | |
| modules: [ | |
| // Doc:https://github.com/nuxt-community/modules/tree/master/packages/bulma | |
| '@nuxtjs/bulma', | |
| ['nuxt-fontawesome', { | |
| component: 'fa', | |
| imports: [ | |
| //import whole set | |
| { | |
| set: '@fortawesome/free-solid-svg-icons', | |
| icons: ['fas'] | |
| }, | |
| { | |
| set: '@fortawesome/free-brands-svg-icons', | |
| icons: ['fab'] | |
| } | |
| ] | |
| }] | |
| ], | |
| /* | |
| ** Build configuration | |
| */ | |
| build: { | |
| postcss: { | |
| preset: { | |
| features: { | |
| customProperties: false | |
| } | |
| } | |
| }, | |
| /* | |
| ** You can extend webpack config here | |
| */ | |
| extend(config, ctx) { | |
| // Run ESLint on save | |
| if (ctx.isDev && ctx.isClient) { | |
| config.module.rules.push({ | |
| enforce: 'pre', | |
| test: /\.(js|vue)$/, | |
| loader: 'eslint-loader', | |
| exclude: /(node_modules)/ | |
| }) | |
| } | |
| config.module.rules.push({ | |
| test: /\.md$/, | |
| use: ['raw-loader'] | |
| }) | |
| } | |
| } | |
| } |
| <template> | |
| <div :key="$route.params.slug"> | |
| <section class="hero is-primary"> | |
| <div | |
| class="hero-body" | |
| style="padding-top:100px;"> | |
| <div class="container"> | |
| <h1 class="title"> | |
| {{ attributes.title }} | |
| </h1> | |
| <h2 | |
| v-if="attributes.date" | |
| class="subtitle"> | |
| {{ new Date(attributes.date).toLocaleDateString() }} | |
| </h2> | |
| </div> | |
| </div> | |
| </section> | |
| <div class="container"> | |
| <div | |
| class="contentWrapper content" | |
| v-html="content"/> | |
| </div> | |
| </div> | |
| </template> | |
| <script> | |
| const fm = require('front-matter') | |
| var md = require('markdown-it')({ | |
| html: true, | |
| linkify: true, | |
| typographer: true | |
| }) | |
| export default { | |
| async asyncData ({params}) { | |
| const fileContent = await import(`~/static/dynamicMarkdownFiles/${params.slug}.md`) | |
| let res = fm(fileContent.default) | |
| return { | |
| attributes: res.attributes, | |
| content: md.render(res.body) | |
| } | |
| } | |
| } | |
| </script> | |
| <style> | |
| </style> |