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 インデックス使用状況監視スキル (収集する価値あり!)

推薦する

CSS で 2 つの固定列と 1 つの適応列を実装するいくつかの方法

この記事では、CSS で 2 つの固定列と 1 つのアダプティブ列を実装するいくつかの方法を紹介し、...

JS を使用してデータ型を決定する 4 つの方法

目次序文1. 型2. インスタンス3. コンストラクター詳細: 4. 文字列要約する序文Javasc...

JSONP クロスドメインシミュレーション Baidu 検索

目次1. JSONPとは何か2. JSONPクロスドメインリクエスト3. Baidu検索をシミュレー...

mysql を解決: エラー 1045 (28000): ユーザー 'root'@'localhost' のアクセスが拒否されました (パスワードの使用: NO/YES)

1. 問題時々Mysqlにログインしてパスワードを入力すると、この状況が発生しますmysql -u...

MySQLデータベースインデックスの左端一致原則

目次1. 共同インデックスの説明2. ac はインデックスを使用できますか? 3. 考える4. 最左...

dockerでlnmp環境を構築する方法

プロジェクトディレクトリを作成する php ディレクトリをコピーする次のプロジェクト構造を作成します...

Javascript クロージャの使用シナリオの原則の詳細

目次1. 終了2. クロージャの使用シナリオ1.タイムアウトを設定する2. コールバック3. 手ぶれ...

IE 8/Chrome/Firefox と互換性のあるコメント返信ポップアップマスク効果実装アイデア

平日はニュースに注目して、テンセントをよく閲覧しています。しかし、コメントへの返信はほとんど見られま...

CentOS 7 での Nginx ログタイミング分割の実装手順の詳細説明

1. 分割スクリプト (splitNginxLog.sh) を作成します。 * この例では、ログ分割...

レスポンシブ原則と Vue2.0/3.0 の違いについての簡単な分析

序文vue3.0 が正式にリリースされて以来、多くの友人が vue3.0 に切り替えました。ここでは...

MySQL InnoDB ロックの概要

目次1. 共有ロックと排他ロック2. 意図ロック3. レコードロック4. ギャップロック5. ネクス...

JavaScript の構成と継承の説明

目次1. はじめに2. プロトタイプチェーン継承3. コンストラクタの継承4. 組み合わせ継承1. ...

iframe テクニックを使用して訪問者 QQ 実装のアイデアとサンプル コードを取得する

今日、仕事中に、一時的に追加した友人から、Web ページを使用して訪問者の QQ を取得する方法を尋...

CocosCreator MVCアーキテクチャの詳細な説明

概要この記事では、ゲームクライアントでよく使用される MVC アーキテクチャについて紹介します。ゲー...

MySQL 8.0.15 winx64 のインストールと設定方法のグラフィックチュートリアル

この記事では、MySQL 8.0.15のインストールと設定方法を参考までに紹介します。具体的な内容は...