これは前回の記事の補足です。設定プロジェクトで遭遇したいくつかの問題を記録しています。皆さんの参考になれば幸いです〜 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 メール サーバーをインストールして設定する方法
目次Linux netstat コマンド1. TCP接続ステータスの詳細な説明2. コマンド形式3....
mybatis を学習しているときにエラーが発生しました。エラーの内容は次のとおりです。データベース...
MySql は常に MySQLInstallerConsole.exe ウィンドウを定期的にポップア...
社内には以前からアイドル状態だった、構成の整ったサーバーがあったので、EXSI 6.0 を使って複数...
簡単です。チュートリアルを見てください。ブロガー1. まずdockerを起動するサービスdocker...
問題の説明 (以下の説明は Windows 環境に限定されます): D:\develop\ide\m...
privot は、多対多の関係の中間テーブルです。 PT5 フレームワークは自動的に privot ...
データベースに関して最もよく聞かれる質問の 1 つは、現在のビジネス ニーズを満たす MySQL の...
概要: nginx リバース プロキシ jira を構成し、https を実装します。Tomcat ...
目次プロジェクトの作成プロジェクト構造メイン.jsアプリ.vue:設定コンポジションAPI参照反応的...
目次Linux の MariaDB データベースについて1. データベースとは何ですか? 2. デー...
1. コンセプト1. ホットバックアップとバックアップの違いホット バックアップは高可用性 (HA)...
div の背景を透明にする一般的な方法は 2 つあります。 1. 不透明度属性を 0 ~ 1 の値に...
システム提供のMySQLをアンインストールする1. MySQLがシステムにインストールされているかど...
目次1. 特徴2. 例3. オプション4. 基本的な文法5. ライフサイクル6. ルーティング管理 ...