LoginSignup
48
41

More than 5 years have passed since last update.

Vue.jsでMarkdownを表示する

Last updated at Posted at 2019-02-01

軽いメモ。

根っからのアプリエンジニアな所為か、静的なページを作るのがとても面倒に感じます。

なんでいちいち文字組みせんといかんねんって感じで。
HTMLタグとか知らんし。

デザインセンスの欠片もないエンジニアはMarkdownが限界です。
ってか、Markdownそのまま表示したらええやん。

で、思い立ったんででやりました。
(ざーっとやったんで、きっともっと簡単な手法があると思います)

構想

  • Vue.jsで
  • .mdファイルを読ませて
  • 表示だけする

Vue.jsを準備

  • 前回参照

Vue.jsでmdファイルを読めるようにする

  • npmで markdown-to-vue-loader をインストール
$ npm install markdown-to-vue-loader vue-loader webpack --save-dev
  • webpackの設定ファイルに追記
webpack.base.conf.js
module: {
  rules: [
    {
      test: /\.md$/,
      exclude: /(node_modules|bower_components)/,
      use: [
        'vue-loader',
        {
          loader: 'markdown-to-vue-loader',
          options: {
              exportSource: true    // この設定でMarkdownのRawデータを読み込めるようにする
          },
        },
      ],
    },
  ],
}

詳しいことはここを参照 (https://github.com/fengyuanchen/markdown-to-vue-loader

Markdownを解析できるようにする

  • npmで marked をインストール
$ npm install marked --save--dev

詳しくはここを参照 (https://github.com/markedjs/marked)

Vue.jsでMarkdownファイルを追加する

  • assetsに追加します

スクリーンショット 2019-02-02 1.49.23.png

Vue.jsでMarkdownを表示してみる

  • 適当にvueコンポーネントを追加
  • Markdownファイルを読み込んで、 marked 関数でパースして、 v-html で展開します
Markdown.vue
<template>
  <div class="markdown">
    <div v-html="compiledMarkdownText" />
  </div>
</template>

<script>
import marked from 'marked'
import md from '../assets/markdown.md'

export default {
  name: 'Markdown',
  data () {
    return {
      markdownText: md.source    // sourceで Rawデータが取得できます 
    }
  },
  computed: {
    compiledMarkdownText: function () {
      return marked(this.markdownText)    // computedにする必要あるかどうかは知らん
    }
  }
}
</script>

<style scoped>
</style>

結果

ビルドしたらこんな感じで表示されます

スクリーンショット 2019-02-02 1.52.45.png

あとはCSSを適当にいじって終わり

以上!

48
41
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
48
41