css-loader を使用して vue-cli で css モジュールを実装する

css-loader を使用して vue-cli で css モジュールを実装する

【序文】

Vue と React の CSS モジュール ソリューションはどちらも、実装にローダーに依存しています。使用中、Vue はscoped属性を使用してスタイルをプライベート化し、ディープ セレクター/deepを使用してスタイルを非プライベート化します。

例:

<div>
    <div class="demo">
        <div class="child"></
        div>
    </div>
</div>
<スクリプト>
//コード
<スクリプト/>
<style lang="less" スコープ>
  .デモ{
    高さ: 100px;
    パディング上部: 20px;
    背景色: グレー;
    /deep/.child {
      色: 赤;
    }
  }
</スタイル>

これは react での使用方法です (css-loader に基づく):

//テストなし
.デモ{
    高さ: 100px;
    パディング上部: 20px;
    背景色: グレー;
    :global(.child) {
        色: 赤
    }
}
'./test.less' からスタイルをインポートします

//コード

<div className={styles.demo}>
    <div class="child"></div>
</div>

vue の方が使いやすいと言わざるを得ません。

この CSS モジュールのソリューションを実装するために、Vue で css-loader を使用する必要がある場合はどうなりますか?ここでは、vue-clie 3.x を例に挙げます。

vue のスキャフォールディングvue-cliでも、 react のスキャフォールディングumiでも、 webpack-chain webpack の設定に使用されるようになりました。

ここで、 vue-cliスキャフォールディングによって作成されたプロジェクトのルート ディレクトリに、新しいvue.config.jsを作成し、次の内容を記述します。

モジュール.エクスポート = {
  チェーンWebpack: (config) => {
    config.devServer
      。プロキシ({
        '/api': {
          ターゲット: 'http://localhost:3000',
          パス書き換え: { '^/api': '', },
        },
      })
      .port(9000);

    構成モジュール
    .rule('less')
    .oneOf('通常のモジュール')
    .test(/.less$/)
    .use('css-loader')
    .tap(オプション => {
      Object.assign(options, { を返します
        モジュール:
          localIdentName: '[name]__[local]___[hash:base64:5]',
          自動: /\.less$/i,
        },
      })
    });

  },
};

実はこの段落を書く必要はありません。vue-cli の scaffolding はデフォルトでcss-loaderのモジュール化を設定していますが、 less ファイルはxxx.module.lessという形式で名前を付ける必要があり、 umi設定と異なり不便です。設定して再起動したら react のように css を書いて、インポートしたstyle dataに格納すれば良いのです。ここでは、vue-cli でcss-loaderを使用できるソリューションについてのみ説明しますが、ベストプラクティスは vue に付属しているものを使用することです

これで、css-loader を使用して vue-cli で css モジュールを実装する方法についての説明は終了です。vue-cli で css モジュールを使用する方法の詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

<<:  HTML ページはダーク モードの実装をサポートします

>>:  Nginx 構成 SSL および WSS 手順の紹介

推薦する

Web デザインでフラッシュ オーバーレイ ポップアップ レイヤーの z-index プロパティを設定しても機能しない

デフォルトでは、Flash は常にページのトップレベルに表示されます。つまり、ページに DHTML ...

ファイルをアップロードするときに enctype フィールドを使用する理由は何ですか?

FORM 要素の enctype 属性は、フォーム データがサーバーに送信されるときに使用されるエン...

MySQL SELECT文の実行方法

MySQL Select ステートメントはどのように実行されますか?最近、Geek Time で D...

Vue+ElementUI で超大規模なフォーム例を処理する方法

最近、社内の業務調整により、以前の超長文のロジックが大幅に変更されたため、リファクタリングする予定で...

JavaScript の基礎におけるデータ型の詳細な説明

目次1. データ型1.1 なぜデータ型が必要なのか? 1.2 変数のデータ型1.3 データ型の分類2...

よく使用される Linux コマンドの完全なリスト (推奨コレクション)

目次1. システム情報2. シャットダウン(システムのシャットダウン、再起動、ログアウト) 3. フ...

MySql インデックスを表示および最適化する方法

MySQL はハッシュ インデックスと Btree インデックスをサポートしています。 InnoDB...

Web フォームの入力要素の高度な使用例 11 選

1. ボタンが押されたときに点線のボックスをキャンセルする<br />入力に属性値hid...

Flexレイアウトを使用してヘッドの固定コンテンツ領域のスクロールを実現する方法

ページ ヘッダーの固定レイアウトは、以前は position:fixed を使用して実装されていまし...

ボリュームを使用してホストと Docker コンテナ間でファイルを転送する方法

以前、Docker コンテナとローカル マシン間のファイル転送に関する記事を書きました。しかし、この...

Vue 初心者ガイド: 環境の構築と開始方法

目次初期ビューVue開発環境の構築Vueインスタンスの作成Vue テンプレート構文Vue データバイ...

MySQLで置換関数を実装するためのいくつかの実用的なシナリオ

REPLACE構文REPLACE(String,from_str,to_str)つまり、String...

CSS 経由で JS にパラメータを渡す方法

1. CSSを通す必要がある背景CSS におけるメディアクエリの用途は、デバイスサイズの判別、マウス...

MySQL 独立インデックスと共同インデックスの選択

複数列のインデックスについては、理解が不足していることがよくあります。よくある間違いは、多数の列に独...

フロントエンド例外 502 不正なゲートウェイの原因と解決策

目次502 不正なゲートウェイ エラーの発生1. 502 不正なゲートウェイ エラーとは何ですか? ...