Webpack パッケージング CSS 背景画像パスの問題に対する完璧なソリューション

Webpack パッケージング CSS 背景画像パスの問題に対する完璧なソリューション

vue コンポーネントのスタイル タグ内には、背景画像を使用する次の CSS コードがあります。

背景画像: url("../assets/img/icon_add.png");

webpackのcss-loaderの解析構成は次のとおりです。

{
        テスト: /\.(css|less)$/,
        除外: path.resolve(__dirname, 'node_modules'),
        使用法: ['style-loader', 'css-loader', 'less-loader']
    }

パッケージ化後、dist ディレクトリに css ファイルが見つかりません。これは、css ファイルが js ファイルに変換されるためです。

この時点でプロジェクトを起動すると、背景画像が正しくインポートされ、正常に表示できるようになります。

2 CSSファイルを別のファイルディレクトリに抽出する

mini-css-extract-plugin を使用して、CSS ファイルを dist ディレクトリの下の css ディレクトリに個別に抽出します。

2.1 ローダーの設定

{
        テスト: /\.(css|less)$/,
        除外: path.resolve(__dirname, 'node_modules'),
        使用: [MiniCssExtractPlugin.loader, 'css-loader', 'less-loader']
    }

2.2 プラグインの設定

新しい MiniCssExtractPlugin({
            ファイル名: 'css/[name][contenthash].css',
        })

パッケージ化後、distディレクトリ構造は次のようになります。

画像はルート ディレクトリ (dist) にありますが、CSS ファイルは dist/css/ ディレクトリにあることがわかります。次に、パッケージ化された CSS ファイルが画像パスを参照する方法を見てみましょう。

2.3 パッケージングの結果

背景画像: url(bb65a86a2fe7669e483a56b970bea421.png);

dist/css ディレクトリに bb65a86a2fe7669e483a56b970bea421.png 画像がないことがわかります。そのため、画像が正しく表示されません。理想的な状況は

背景画像: url(../bb65a86a2fe7669e483a56b970bea421.png);

3つの解決策

ローダーの設定を次のように変更します

{
        ローダー: MiniCssExtractPlugin.loader、
        オプション:
            // パッケージ化されたルート パスに対する現在の CSS ファイルの相対パス dist publicPath: '../'
        }
    }, 'css-loader', 'less-loader'

要約する

CSS ファイルを分離すると、CSS 背景画像パス エラーが発生します。解決策の核となるのは、publicPath の値を構成することです。publicPath の値は、ルート ディレクトリを基準とした、CSS ファイルが配置されているファイル ディレクトリの相対パス値です。 たとえば、ルート パスは / で、css ファイルが配置されているディレクトリは /css/ なので、相対パスは次のようになります。

予期せぬ問題

webpack のパッケージ化後に css ファイルが bundle.js ファイルに混合されるのに、画像が bundle.js に混合されないのはなぜですか? ? ?

これで、webpack パッケージング CSS 背景画像パスの問題に対する完璧な解決策に関するこの記事は終わりです。より関連性の高い webpack パッケージング CSS 背景画像パスのコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後も 123WORDPRESS.COM を応援していただければ幸いです。

<<:  Dockerイメージを構築する2つの方法

>>:  HTML リスト タグ dl、ul、ol の使用例

推薦する

MySQL における Datetime と Timestamp の使用の概要

目次1. MySQL で現在の時刻を表現するにはどうすればよいでしょうか? 2. TIMESTAMP...

React Router で履歴リダイレクトを使用する方法

react-routerでは、コンポーネント内のジャンプは<Link>で使用できます。し...

HTML+CSSを使用してマウスの動きを追跡する

ユーザーがプライバシーを意識するようになり、オンライン トラッキングに対する予防策を強化するにつれて...

Vue3 の SetUp 関数のプロパティとコンテキスト パラメータの詳細な説明

1. setUp関数の最初のパラメータpropsセットアップ(プロパティ、コンテキスト){}最初のパ...

Ubuntu 16.04.5LTS に SVN をインストールする手順

この記事では、UbuntuシステムでSVNを設定するプロセスを簡単に紹介します。ソースを更新sudo...

MySQLの読み書き分離により挿入後にデータが選択されなくなる問題を解決

MySQLは独立した書き込み分離を設定します。コードに次のものを書くと問題が発生する可能性があります...

MySQL コマンドを使用してインデックスを作成、削除、およびクエリする方法の紹介

MySQL データベース テーブルでは、インデックスを作成、表示、再構築、削除できるため、クエリ速度...

統計量に対するmySql SQLクエリ操作

余計なことは言わないで、コードだけ見てみましょう〜 プロジェクト番号を選択、 sum(case wh...

MySQL最適化ツール(推奨)

序文今日 GitHub を閲覧していたところ、SQL を最適化および書き換えるための sora とい...

MySQL でよく使われる型変換関数の概要 (推奨)

1. Concat関数。よく使用される接続文字列: concat 関数。たとえば、SQLクエリ条件...

VMware Workstation 14 Pro のインストールとアクティベーションのグラフィック チュートリアル

この記事では、VMware Workstation 14 Proのインストールとアクティベーションに...

MySQL の隠し列の詳細表示

目次1. 主キーが存在する2. 主キーはないが、一意のインデックスが存在する3. 共同主キーまたは共...

安全な構成のためにDockerでTLSを有効にする手順

序文以前、Docker の 2375 Remote API を有効にしていました。会社のセキュリティ...