Vite2+Vue3を使用してMarkdownドキュメントをレンダリングする練習

Vite2+Vue3を使用してMarkdownドキュメントをレンダリングする練習

Vite2 を使用するほとんどの開発者が遭遇する問題は、ドキュメントに Markdown のサポートについての説明がないことです。では、Vite プロジェクトで Markdown のインポートとレンダリングをサポートしたい場合はどうすればよいでしょうか?この記事では2つの方法を紹介します。

カスタム Vite プラグイン

ネット上の関連質問を見ると、ほとんどがこのやり方、つまり、Vite で Markdown レンダリングをサポートするためのカスタム プラグインに関するものです。具体的な手順は次のとおりです。

プロジェクトのルート ディレクトリに md.js ファイルを作成し、次の内容を入力します。

'path' からパスをインポートします。
'fs' から fs をインポートします。
'marked' から marked をインポートします。

const mdToJs = str => {
  const コンテンツ = JSON.stringify(marked(str));
  `export default ${content}` を返します。
};

エクスポート関数md() {
  戻る {
    configureServer: [ // 開発用 async ({ app }) => {
        app.use(async (ctx, next) => {
          // .md という拡張子のファイルを取得し、それを js ファイルに変換します if (ctx.path.endsWith('.md')) {             
            ctx.type = 'js';
            定数 filePath = path.join(process.cwd(), ctx.path);
            ctx.body = mdToJs(fs.readFileSync(filePath).toString());
          } それ以外 {
            次の()を待ちます。
          }
        });
      },
    ]、
    変換: [{ // ロールアップ用
      テスト: context => context.path.endsWith('.md'),
      変換: ({ code }) => mdToJs(code)
    }]
  };
}

次に、vite.config.js を変更し、上記で作成したプラグインをインポートします。

'./md' から {md} をインポートします。

エクスポートデフォルト{
  プラグイン: [md()]
};

この方法を使用すると、インポートされた md ファイルはレンダリング用の js ファイルに変換されます。具体的な使用例:

<テンプレート>
<記事 v-html="md" />
</テンプレート>

<script lang="ts">
'./xxx.md' から md をインポートします
エクスポートデフォルト{
設定(){

  {md} を返す
  
  }
}

vite-plugin-markdownの使用

このサードパーティ製プラグインは、Markdown ファイルのインポートとレンダリングをサポートするだけでなく、HTML 文字列、React または Vue コンポーネントなどのさまざまな形式へのレンダリングもサポートします。
vite-plugin-markdownをインストールします。

npm と vite-plugin-markdown

vite.config.js で変更します:

const mdPlugin = require('vite-plugin-markdown')

エクスポートデフォルト{
  プラグイン: [
    mdPlugin.plugin({
      モード: ['html'],
    })
  ]
}

オプション オブジェクトが構成に渡され、次のパラメーターがサポートされます。

モード: ('html' | 'toc' | 'react' | 'vue')[]

マークダウン?: (本文: 文字列) => 文字列

マークダウン?: マークダウン | マークダウン.オプション

各モードでのレンダリング例:

Front Matter属性をインポートする

---
タイトル: 素晴らしいタイトル
説明: この素晴らしいコンテンツについて説明してください
タグ:
  - "素晴らしい"
  - "素晴らしい"
  - 「すごい」
---
# これはすごい
Vite は、開発中にネイティブ ES モジュールのインポートを介してコードを提供し、本番環境用に Rollup とバンドルする、独自の Web 開発ビルド ツールです。

'./contents/the-doc.md' から { 属性 } をインポートします。

console.log(attributes) //=> { title: '素晴らしいタイトル', description: 'この素晴らしいコンテンツを説明してください', tags: ['素晴らしい', '素晴らしい', '素晴らしい'] }

コンパイルされた HTML (Mode.HTML) をインポートする

'./contents/the-doc.md' から { html } をインポートします。

コンソール.log(html) 
//=> "<h1>これは素晴らしい</h1><p>ite は、開発中にネイティブ ES モジュールのインポートを介してコードを提供し、本番環境用に Rollup とバンドルする、独自の Web 開発ビルド ツールです。</p>"

ToC メタデータをインポートする (Mode.TOC)

# バイト

Vite は、開発中にネイティブ ES モジュールのインポートを介してコードを提供し、本番環境用に Rollup とバンドルする、独自の Web 開発ビルド ツールです。

## 状態

## はじめる

# 注記

'./contents/the-doc.md' から { toc } をインポートします。

コンソール.log(toc)
//=> [{ レベル: '1', コンテンツ: 'vite' }, { レベル: '2', コンテンツ: 'ステータス' }, { レベル: '2', コンテンツ: 'はじめに' }, { レベル: '1', コンテンツ: 'メモ' },]

React コンポーネントとしてインポート (Mode.REACT)

'react' から React をインポートします
'./contents/the-doc.md' から { ReactComponent } をインポートします。

関数MyReactApp() {
  戻る (
    <div>
      <Reactコンポーネント />
    </div>
}

Vue コンポーネントとしてインポート (Mode.VUE)

<テンプレート>
  <記事>
    <マークダウンコンテンツ />
  </記事>
</テンプレート>

<スクリプト>
'./contents/the-doc.md' から { VueComponent } をインポートします。

エクスポートデフォルト{
  コンポーネント:
    マークダウンコンテンツ: VueComponent
  }
};
</スクリプト>

最後に

Vite2+Vue3を使用してMarkdown文書をレンダリングする実践に関するこの記事はこれで終わりです。より関連性の高いVite2+Vue3レンダリングMarkdownコンテンツについては、123WORDPRESS.COMの以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも123WORDPRESS.COMを応援してください。

以下もご興味があるかもしれません:
  • Vue3ナビゲーションバーコンポーネントのカプセル化実装方法
  • Vue3 Vue イベント処理ガイド
  • Vue3 シングルファイルコンポーネントのスタイル機能の詳細な説明
  • vue3.0+echarts は 3 次元の縦棒グラフを実現します
  • この記事では、Vue 3.0 レスポンシブの使い方を説明します。
  • vue3.2 で追加された defineCustomElement の基本原理の詳細な説明
  • Vue3 + TypeScript 開発の概要
  • Vue3+TypeScriptは再帰メニューコンポーネントの完全な例を実装します
  • Vue3はToDoリストを実装する
  • Vue3+スクリプト設定+ts+Vite+Volarプロジェクト
  • Vue3 コンポジション API でロジックの再利用を実装する方法
  • Vue3は画像拡大鏡効果を実現します
  • vue3.0+vant3.0の迅速なプロジェクト構築の実装
  • Vue3 ドキュメント クイックスタート

<<:  Linux calコマンドの使用

>>:  MySQL インデックス使用状況監視スキル (収集する価値あり!)

推薦する

MySQL 分離レベルの詳細な説明と例

目次MySQL の 4 つの分離レベルデータ テーブルを作成します。分離レベルの設定物事の分離レベル...

選択/フォーカス時にすべてのオプションをリストする現在のより良い方法

開発中にこのような要件に遭遇したので、将来使用するために記録しました。需要背景キーボード ショートカ...

CSSはメッセージパネルをスライドするWebコンポーネント機能を実装します

みなさんこんにちは。私と同じように混乱している方はいらっしゃいませんか。CSS は簡単に始められます...

Centos8 (最小インストール) Python3.8+pip のインストール方法に関するチュートリアル

Python8のインストールを最小化した後、Python3.8.1をインストールしました。オンライン...

MySQL でデータ テーブルを作成し、主キーと外部キーの関係を確立する方法の詳細な説明

序文MySQL テーブルの主キーと外部キーを作成するときは、次の点に注意する必要があります。主キーと...

WHMCS V7.4.2 グラフィカル インストール チュートリアル

1. はじめにWHMCS は、ユーザー管理、請求書の支払い、ヘルプ サービスなど、オンライン ビジネ...

React useMemo と useCallback の使用シナリオ

目次メモを使うコールバックの使用メモを使う親コンポーネントが再レンダリングされると、そのすべての要素...

MySQLの行数カウントに関する簡単な説明

各テーブルの行数をカウントするために使用される MySQL count() 関数は、誰もがよく知って...

VueはOSSを使用して画像や添付ファイルをアップロードします

OSS を使用して Vue プロジェクトに画像や添付ファイルをアップロードするここでは、写真のアップ...

VMware仮想マシンにdeepin20をインストールする最も完全で詳細なプロセス

仮想マシンソフトウェア: VMware Workstationイメージ: deepin-deskto...

Dockerコンテナを作成、起動、停止する方法

1. コンテナとは、独立して実行されるアプリケーション、またはアプリケーションのグループとその動作環...

入力のsize属性とmaxlength属性の違い

最近、プロジェクトで input size 属性と maxlength 属性を使用しました。以前は、...

spanタグのスタイルに幅属性を設定する方法

span タグのスタイルに width 属性を直接設定すると、効果がないことがわかります。 disp...

なぜ IE6 が最も多くの人に使用されているのでしょうか?

まず第一に、私はウェブデザイナーです。具体的には、私は XHTML フロントエンド デザイナーです。...

CentOS 8で自動更新を設定するための手順を完了する

データとコンピューターに対してできる最善のことは、それらを安全に保つことです。アップデートを有効にす...