これは前回の記事の補足です。設定プロジェクトで遭遇したいくつかの問題を記録しています。皆さんの参考になれば幸いです〜 Viteプロジェクトビルドの最適化ルーティングの動的インポートはロールアップを通じて構築されます。動的にインポートされたファイルは非同期チャンク ファイルを生成します。このファイルはプロジェクトにアクセスするときにオンデマンドでロードされるため、アプリケーションのロード速度が大幅に向上します。 '@/views/home/index.vue' から Home をインポートします。 '@/components/Layout.vue' からレイアウトをインポートします。 const ルート: Array<RouteRecordRaw> = [ { パス: '/'、 コンポーネント: レイアウト、 リダイレクト: '/home', 子供たち: [ { パス: '/home', 名前: 'ホーム'、 コンポーネント: ホーム、 meta: { title: 'ホームページ' } }, { パス: '/about', 名前: 'About'、 meta: { title: 'About', keepAlive: true }, コンポーネント: () => import('@/views/about/index.vue') }, { パス: '/square', 名前: 'スクエア'、 meta: { title: 'コンポーネントスクエア', keepAlive: true }, コンポーネント: () => import('@/views/square/index.vue') } ] } ] const ルーター = createRouter({ 履歴: process.env.NODE_ENV === 'development' ? WebHistoryを作成します(process.env.BASE_URL) : WebHashHistoryを作成します(process.env.BASE_URL)、 ルート、 scrollBehavior(to, from, savedPosition) { if (保存された位置) { // 背景が転送されたときにのみ、savedPosition が返されます } それ以外 { 戻り値 { top: 0, 動作: 'smooth' } } } }) router.beforeEach((to, from, next) => { // 権限のチェックをいくつか行うことができます if (to.path !== from.path) { document.title = `スターミュージックサークル | ${to.meta.title}` } 次() }) router.onError((エラー) => { const パターン = /チャンクの読み込み (\d)+ 失敗/g const isChunkLoadFailed = error.message.match(パターン) if (isChunkLoadFailed) { 場所.reload() } }) デフォルトルーターをエクスポートする 上記のコードは、[email protected] を使用して Vite によってビルドされた Vue プロジェクトのルーター ファイルです。Vue Router はすぐに使用できる動的インポートをサポートしているため、静的インポートの代わりに動的インポートを使用できます。コードを見ると、about ページと square ページの両方が動的にインポートされていることがわかります。 動的インポートに関しては、MDNに非常に詳細な紹介があります: ポータル ロールアップがビルドされると、動的にインポートされたファイルによって非同期チャンク ファイルが生成され、プロジェクトにアクセスするときにオンデマンドで読み込まれるため、アプリケーションの読み込み速度が大幅に向上します。 vite プロジェクトでのルートの動的インポートで遭遇した落とし穴: @/ エイリアスはビルド時にはサポートされません。ビルド中に、ロールアップビルドは設定されたエイリアスに従って対応するファイルを見つけることができないため、ビルドプロセス中にエラーが報告されます。 解決:
設定時に遭遇したいくつかのエラーと警告
この警告は、vite 構成項目 esbuild.target が 'es2019' の場合に表示されます。この場合、import.meta API はサポートされていないことを示します。
import.meta.glob() のパラメータは、ルートディレクトリに相対的に一致させるために「.」または「/」で始まる必要があります。 最終的な記述コード: '@/components/Layout.vue' からレイアウトをインポートします。 const モジュール = import.meta.glob('/src/views/*/index.vue') const ルート: Array<RouteRecordRaw> = [ { パス: '/'、 コンポーネント: レイアウト、 リダイレクト: '/home', 子供たち: [ { パス: '/home', 名前: 'ホーム'、 コンポーネント: モジュール['/src/views/home/index.vue'], meta: { title: 'ホームページ' } }, { パス: '/about', 名前: 'About'、 meta: { title: 'About', keepAlive: true }, コンポーネント: モジュール['/src/views/about/index.vue'] }, { パス: '/square', 名前: 'スクエア'、 meta: { title: 'コンポーネントスクエア', keepAlive: true }, コンポーネント: モジュール['/src/views/square/index.vue'] } ] } ] import.meta.glob メソッドを使用すると、バックエンド インターフェイスを介したルーティングを構成し、制御可能な方法で権限を制御できます。ルート データがインターフェイスによって返される場合、権限の範囲内にないコンポーネントはルーティング項目をまったく生成しないため、権限制御の強度が確実に高まります。 build.rollupOptions.manualChunks を設定して、node_modules ファイルを別のパッケージにロードします。 マニュアルチャンク(id) { id.includes('node_modules') && id.includes('prime') の場合 { '素数'を返す } そうでない場合 (id.includes('node_modules') && id.includes('vue')) { 'vue' を返す } そうでなければ (id.includes('node_modules')) { 'ベンダー'を返す } } これが設定されていない場合、vite は node_modules パッケージを大きな非同期 vendor.js ファイルにパッケージ化します。ファイルが大きすぎると、ページがレンダリングされるときにブロック時間が間違いなく長くなります。また、ページ キャッシュの最適化にも役立ちません。 さらに、viteがビルドされると、次のhtmlファイルが自動的に生成されます。 <!DOCTYPE html> <html lang="ja"> <ヘッド> <メタ文字セット="UTF-8" /> <link rel="icon" href="/favicon.ico" rel="外部 nofollow" /> <meta name="viewport" content="width=デバイス幅、初期スケール=1.0" /> <title>私のプロジェクト</title> <script type="module" crossorigin src="/assets/index.e3627129.js"></script> <link rel="modulepreload" href="/js/vue/vue.a1ee204f.js" rel="外部nofollow" > <link rel="modulepreload" href="/js/prime/prime.eb4bfea6.js" rel="外部nofollow" > <link rel="スタイルシート" href="/assets/prime.296674d4.css" rel="外部nofollow" > <link rel="スタイルシート" href="/assets/index.289426b3.css" rel="外部nofollow" > </head> <本文> <div id="アプリ"></div> </本文> </html> rel="modulepreload" 属性を持つリンク タグは、ネイティブ モジュールをプリロードして、一部のファイルが実行までロードされるのを待つ必要がないようにすることができ、これによりページのパフォーマンスも向上します。 画像リソースファイルの処理。 assetInlineLimit オプション値より小さいアセットは、base64 データ URL としてインライン化され、それを参照するファイルと一緒にパッケージ化されます。これにより、ファイルリクエストの数が減り、プロジェクトのパフォーマンスが向上します。 他の動的にインポートされたファイルによって生成された非同期チャンクを対応するフォルダーに配置するか、チャンク名をカスタマイズします。 こんにちは、ロールアップのドキュメントを長い間チェックし、しばらく自分で試してみた後、ついに成功しました。次の構成を参照してください。 デフォルトのdefineConfigをエクスポートする({ 建てる: { 資産ディレクトリ: '資産', ロールアップオプション: { 出力: { // eslint 次の行を無効にする @typescript-eslint/no-explicit-any チャンクファイル名: (チャンク情報: 任意) => { const facadeModuleId = chunkInfo.facadeModuleId ? chunkInfo.facadeModuleId.split('/') : [] const fileName = facadeModuleId[facadeModuleId.length - 2] || '[name]' `js/${fileName}/[name].[hash].js` を返します }, } } } }) vite 構成はグローバル SCSS 変数を渡します 構成は以下のとおりです デフォルトのdefineConfigをエクスポートする({ css: { プリプロセッサオプション: { SCSS: { 追加データ: '@import "./src/styles/variables";' } } }, }) また、vite のバージョンによって設定項目に若干の違いがあることにも注意してください。そのため、プロジェクトを構成する際に、ドキュメントに完全に従って構成しても問題が発生する場合は、使用しているバージョンとドキュメントのバージョンの違いが原因であるかどうかを確認することをお勧めします。 やっと私が構成した vite2.0+Vue3.0 プロジェクト「Portal」を共有します。これは、水面下でテストするために使用されるプロジェクトです。何か間違っている点があれば、ご指摘ください。 vite2.0 の落とし穴に関するこの記事はこれで終わりです。vite2.0 の落とし穴に関するその他の関連記事については、123WORDPRESS.COM で以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
>>: CentOS 8 に Postfix メール サーバーをインストールして設定する方法
1. ソースコードからovsをコンパイルしてインストールします。依存関係をインストールします: # ...
1. xhtmlの下のスクロールバーの色元の HTML では、ページ全体のスクロール バーを次のよう...
次のコマンドを実行します: glxinfo | grep レンダリング結果が「はい」の場合、グラフィ...
テーブル パーティショニングは、データベース パーティショニングとは異なります。では、テーブル パー...
1. 要件:データベースのバックアップは、実稼働環境にとって特に重要です。データベースのバックアップ...
1. 理由新しいシステムに MySQL を再インストールする必要があったので、将来詳細を忘れた場合...
MySQL は最も人気のあるリレーショナル データベース管理システムです。WEB アプリケーションに...
情報を探すインターネットで見つかったいくつかの方法: autocomplete="off&...
ブログを書くのは初めてです。開発に携わって2年になります。仕事の後に何か有意義なことを見つけたいと思...
序文タイトルを見ると、誰もが「Debian 9 に MySQL をインストールするにはどうすればいい...
私はかつて、ウェブサイトを一度も構築したことのない人々が、初心者向けのウェブサイト構築方法に関する私...
新しいプロジェクトは基本的に終了しました。フロントエンドとバックエンドを分離して統合を完了したのは初...
この記事では、WeChatアプレットで写真を撮ったり、アルバムから写真を選択したりするための具体的な...
目次1. 3.0をより適切にサポートするには、vue/cliのバージョンが4.5.0以上であることを...
Microsoft は後からブラウザの研究開発に力を入れてきましたが、実際のところ、最新の IE ブ...