Viteは仮想ファイルの実装を導入します

Viteは仮想ファイルの実装を導入します

背景

新しいプロジェクトで vue3 をアップグレードした後、当然のことながら vue-cli と webpack を vite に置き換えました。vite は本当に優れていると言わざるを得ません。コンパイル速度がちょうど良いだけでなく、vue3 の新機能のサポートも優れています。

しかし、開発プロセス中にいくつかの問題が発生しました。

vite-plugin-pagesプラグインを見た後、突然次のような書き方を目にしました:

「virtual:generated-pages」からルートをインポートします。

実際、多くの vite プラグインを使用していると、リファレンスに次のような使い方があることが分かりました。

「virtual:xxx」からxxxをインポートします。

では、なぜこれまでこの virtual:xxx を見たことがなかったのでしょうか? これは明らかに npm のパッケージではありません。何なのでしょうか?

仮想ファイルのインポート

vite のドキュメントを読んだ後、これは仮想ファイルをインポートする機能であることがわかりました。インポートするための仮想ファイルを生成できます。

この機能は、vite ドキュメントのプラグイン API の仮想ファイルの導入に関するセクションで説明されています。仮想ファイルの導入をサポートするセクションに記述されています。つまり、このファイルは存在しないが、コードによって一時的に生成されるファイルです。

この生成はviteプラグインを通じて行われ、つまりnodejs環境に対応する仮想ファイルを生成します。

vite-plugin-pages はこの関数を通じて実装されます。コンパイル時にまず対応するページ ディレクトリをトラバースし、ディレクトリ構造とファイル名の命名規則に従って対応するルーティング テーブルを動的に生成し、ローカル ディレクトリ構造と動的ルーティングの良好な相互作用を実現します。

実はNuxtにも動的ルーティング機能があるのですが、仮想導入はされていません。プロジェクト開始前にWebpackの設定を動的に変更し、definePluginを使ってルーティングテーブルをフロントエンドコードに渡します。

仮想ファイルの機能を導入することで、定数を渡したり変更したりして、対応するデータをフロントエンド コードに渡す必要がなくなります。

定数を渡すだけでなく、仮想インポートではさらに多くのことができます。仮想 js ファイルをインポートすることを知っておく必要があります。つまり、関数を動的に生成し、その中にロジックをコード化することもできます。


たとえば、生成されたコードに必要なファイルを自動的にインポートし、以前にインポートしたファイルを使用するための関数を返すことができます。このようにすると、実際の使用時にこれらのファイルをインポートする必要がなくなります。仮想ファイルにエクスポートされた関数を返すことで、元々インポートされていたこれらのファイルを直接使用できます。

'a-module' から a をインポートする
'b-module' から b をインポートします
...
'z-module' から z をインポートします

定数モジュール = {a,b,...,z}

デフォルトのuseModule(name)をエクスポートする{
    モジュール[名前]を返す
}

以前使用したもの 👇

'a-module' から a をインポートする
'b-module' から b をインポートします
...
'z-moduleからzをインポートする

()
b()
c()

今すぐ使う👇

'virtual:xxx' から useModule をインポートします。

定数a = useModule('a')
定数 b = useModule('b')
定数 c = useModule('c')

もちろんこれは単なる単純な例であり、想像力を働かせてさらに多くの機能を見つけることができます。

書類

ドキュメントに戻って、特定の機能がどのように実装されているかを見てみましょう。

文書に記載されている例は次のとおりです。

デフォルト関数 myPlugin() をエクスポートします。
  const virtualFileId = '@my-virtual-file'  

  戻る {
    name: 'my-plugin', // 必須、警告とエラーで表示されます。resolveId(id) {
      if (id === 仮想ファイルID) {
        仮想ファイルIDを返す
      }
    },
    ロード(id) {
      if (id === 仮想ファイルID) {
        `export const msg = "仮想ファイルから"` を返します
      }
    }
  }
}

主なポイントは 3 つあることがわかります。

  • virtualFileId: 導入する仮想ファイル名
  • resolveId(id): 解決する必要がある仮想ファイル名であるかどうかを判定します
  • load(id): 対応する仮想インポートファイルのコード文字列を返します

返されたコードは文字列として返されることがわかります。テンプレートのスプライシングまたはテンプレートの変換を使用すると、返される必要のあるコード文字列を簡単に構築できます。

タイプスクリプトのサポート

ただし、仮想ファイルのインポートでは ts コードではなく js コードが返され、コードは動的に生成されることに注意してください。これは、使用中に TS で型サポートがない状況が発生することも意味します。

コード構造が特定の場合は、対応する d.ts 定義ファイルを事前に生成できます。その後、tsconfig でcompilerOptions.types を構成することで、対応する定義ファイルを読み込むことができます。コード構造が動的な場合は、対応する d.ts ファイルを動的に生成し、プロジェクトに書き込んで実装する必要があります。

モジュール 'virtual:xxx' を宣言します {
...
}

要約する

仮想ファイルの導入は非常に実用的な機能であることがわかります。フロントエンド コードがコンパイル環境と対話できるようになるだけでなく、以前は実装がそれほど便利ではなかったいくつかの機能を実装するためのコードを動的に生成することもできます。具体的な実装も開発が非常に簡単です。プラグインで使用する準備はできていますか?

Vite 仮想ファイル導入の実装に関するこの記事はこれで終わりです。Vite 仮想ファイル導入の詳細については、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き閲覧してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Vite と Vue CLI の長所と短所
  • vite2.0+vue3 モバイルプロジェクトの詳細な説明
  • vue3 プロジェクトを素早く構築し、関連機能を紹介する vite+ts の詳細な説明
  • vite2.0 設定学習の詳しい説明(typescript 版)
  • vite+vue3+element-plus プロジェクトをビルドする手順
  • Vue3.0+vite2は動的非同期コンポーネントの遅延読み込みを実装します
  • プロジェクトを素早く構築するためのvite+vue3.0+ts+element-plusの実装
  • Vite2+Vue3を使用してMarkdownドキュメントをレンダリングする練習
  • antd+reactプロジェクトをviteに移行するためのソリューションの詳細な説明

<<:  MySQL 継続的集計の原理と使用法の分析

>>:  Celery と Docker を使用して Django で定期的なタスクを処理する方法

推薦する

alpineをベースにdockerfileで作成したtomcatイメージの実装

1.アルパインイメージをダウンロードする [root@docker43 ~]# docker pul...

MySQL 入門 - 概念

1. それは何ですか? MySQL は最も人気のあるリレーショナル データベース管理システムです。W...

Apache Spark 2.0ジョブは完了するまでに長い時間がかかります

現象Apache Spark 2.x を使用すると、Spark ジョブがすべて完了しているにもかかわ...

HTML の左右レイアウトのサンプルコード

CS: ...コードをコピーコードは次のとおりです。 html,body{ margin:0px; ...

CSS 画像アニメーション効果のサンプルコード(フォトフレーム)

この記事では、CSS 画像アニメーション効果(フォトフレーム)のサンプルコードを紹介し、皆さんと共有...

CSSの複数条件の書き方の詳細説明:

:not疑似クラスセレクターは、式に一致しない要素をフィルタリングできます。例 テーブル tbod...

MySQL5.7.17 winx64 インストール バージョン構成方法 Windows Server 2008 R2 でのグラフィック チュートリアル

参考までに、Winでmysql5.7をインストールします。具体的な内容は次のとおりです。 @Auth...

Linuxの運用・保守の基礎知識から上級者向け知識までをまとめました

運用保守エンジニアは、初期段階では非常に大変な仕事です。この期間中、コンピューターの修理、ネットワー...

Linux でのソース パッケージ インストールのサービス管理

目次1. ソースパッケージサービスの起動管理2. ソースパッケージサービスのセルフスタート管理3. ...

Windows 10 に TomCat をインストールするチュートリアル図

WindowsにTomCatをインストールするこの記事では、WindowsプラットフォームにTomC...

Vue でのルータービューコンポーネントの使用に関する詳細な説明

Vue プロジェクトを開発する場合、さまざまなコンポーネント ページを表示するために切り替えることが...

JavaScript でシンプルな Web 時計を実装する

JavaScript を使用して Web ページ クロックを実装します。効果は次の図に示されています...

Ubuntuデュアルシステムが起動時に停止する問題の解決方法の詳細な説明

起動時に Ubuntu デュアル システムが停止する問題の解決方法 (Ubuntu 16.04 およ...

VMware 仮想マシンに Centos7.3 をインストールするチュートリアル図

VMware の準備 CentOS の準備、こちらは CentOS 7.3 CentOS-7-x86...

Node8 における AsyncHooks 非同期ライフサイクル

Async Hooks は Node8 の新機能です。NodeJs の非同期リソースのライフサイクル...