今日、vue3+viteプロジェクトの実践で、svgを使用する場合、以前の記述方法が使用できないことがわかりました。以前の使用方法は、vue2でのsvgのエレガントな使用を指します const req = require.context('./icons/svg', false, /\.svg$/) const requireAll = requireContent => requireContent.keys().map(requireContent) すべて必須(必須) それから、いろいろな資料を探して、ようやく実現しました。さっそく、コードをご紹介します。 ステップ1: ファイルディレクトリ ステップ2: svg-sprite-loaderをインストールする npm インストール svg-sprite-loader -D # 糸経由 糸にSVGスプライトローダーを追加 -D ステップ3: svgIcon.vueファイルを作成する <テンプレート> <svg :class="svgClass" v-bind="$attrs" :style="{color: color}"> <use :xlink:href="iconName" rel="external nofollow" /> </svg> </テンプレート> <スクリプトの設定> 「vue」から、defineProps、computed をインポートします。 const props = defineProps({ 名前: { タイプ: 文字列、 必須: true }, 色: タイプ: 文字列、 デフォルト: '' } }) const iconName = computed(()=>`#icon-${props.name}`); const svgClass = 計算済み(()=> { コンソールにログ出力します。 if (props.name) { `svg-icon icon-${props.name}` を返します } 'svg-icon' を返す }); </スクリプト> <スタイル lang='scss'> .svgアイコン{ 幅: 1em; 高さ: 1em; 塗りつぶし: 現在の色; 垂直位置合わせ: 中央; } </スタイル> ステップ4: SVGファイルを保存するアイコンフォルダを作成する ステップ5: main.jsにsvg-iconコンポーネントをグローバルに挿入する 'vue' から {createApp} をインポートします。 './App.vue' からアプリをインポートします。 './components/svgIcon.vue' から svgIcon をインポートします。 createApp(App).component('svg-icon', svgIcon).mount('#app'); ステップ 6: プラグイン フォルダーに svgBuilder.js を作成します (ここが重要なポイントです)。ts バージョン参照: https://github.com/JetBrains/svg-sprite-loader/issues/434 'fs' から { readFileSync, readdirSync } をインポートします。 idPerfix = '' とします const svgTitle = /<svg([^>+].*?)>/ const clearHeightWidth = /(幅|高さ)="([^>+].*?)"/g const hasViewBox = /(viewBox="[^>+].*?")/g 定数クリアリターン = /(\r)|(\n)/g 関数 findSvgFile(dir) { 定数svgRes = [] 定数 dirents = readdirSync(dir, { ファイルタイプ: true }) for (const dirent of dirents) { (dirent.isDirectory())の場合{ svgRes.push(...SvgFile を検索(dir + dirent.name + '/')) } それ以外 { const svg = readFileSync(dir + dirent.name) .toString() .replace(クリアリターン、'') .replace(svgTitle, ($1, $2) => { // コンソール.log(++i) // console.log(dirent.name) 幅を0にする 高さを0にする コンテンツ = $2.replace( クリア高さ幅、 (s1, s2, s3) => { s2 === '幅'の場合{ 幅 = s3 } そうでない場合 (s2 === '高さ') { 高さ = s3 } 戻る '' } ) if (!hasViewBox.test($2)) { コンテンツ += `viewBox="0 0 ${幅} ${高さ}"` } `<symbol id="${idPerfix}-${dirent.name.replace( を返します。 '.svg', '' )}" ${content}>` }) .replace('</svg>', '</symbol>') svgRes.push(svg) } } svgResを返す } エクスポート const svgBuilder = (path, perfix = 'icon') => { if (path === '') 戻り値 idPerfix = パーフィックス const res = findSvgFile(パス) // コンソール.log(res.length) // 定数 res = [] 戻る { 名前: 'svg-transform', 変換インデックスHTML(html) { html.replace() を返す '<本文>', ` <本文> <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" スタイル="位置: 絶対; 幅: 0; 高さ: 0"> ${res.join('')} </svg> ` ) } } } ステップ7: 最後に、vite.config.jsの設定を変更します。 './src/plugins/svgBuilder' から { svgBuilder } をインポートします。 デフォルトのdefineConfigをエクスポートする({ plugins: [svgBuilder('./src/icons/svg/')] // src/icons/svg/ の下にあるすべての svg ファイルはここでインポートされているため、個別にインポートする必要はありません}) 要約する これで、Vue3+Vite プロジェクトで SVG を使用する方法に関するこの記事は終了です。Vue3+Vite で SVG を使用する方法に関するより関連性の高いコンテンツについては、123WORDPRESS.COM で以前の記事を検索するか、次の関連記事を引き続き参照してください。今後も 123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: CSS ピクセルとさまざまなモバイル画面適応の問題に対する解決策
>>: シェルを使用して複数のサーバーでバッチ操作を実行する方法
現在、ほとんどの CPU は浮動小数点ユニット (FPU) をサポートしています。FPU は、プロセ...
この記事の例では、ファイルアップロード機能を実現するためのjquery+springbootの具体的...
多くの Web サイト デザイナーが犯す最も一般的な間違いは、Web ページが IE で正常に表示さ...
序文CSS を使用して点線を生成するのは、フロントエンド開発者にとっては簡単です。一般的に、これを実...
1. データベースを作成する 2. テーブルを作成する1. deptテーブルを作成する テーブル「d...
目次導入使用シナリオソースコード分析要約する導入Vue は、コンポーネントをステートレスかつインスタ...
前回の記事では、ボタンをクリックしてファイルをダウンロードするVueの機能を紹介しました。今日は、ボ...
目次概要4つの例例1: 誕生日で説明する約束の基本例2: 数字当てゲーム例3: Web APIから国...
デスクトップ プラットフォームの Web レイアウトのメタ タグは誰もがよく知っています。これは常に...
<br />読みやすさはウェブサイトにとって非常に重要な部分であり、ウェブサイトの核心と...
序文Crond は Linux のスケジュール実行ツール (Windows のスケジュールされたタス...
Arthas はあなたのために何ができるでしょうか? Arthas 、開発者に深く愛されている Al...
プロットレビュー前回の記事では、ロケーション命令の解析プロセスを分析しました。この内容を簡単に確認し...
目次概要1. コンポジションAPI 1. ref と reactive の違いは何ですか? 2. 周...
効果は以下のとおりです。 例1 例2:例1[結婚式の計画]を例にとるHTML: <div cl...