Webpack ソース コードでローダー メカニズムを使用する手順

php中世界最好的语言
リリース: 2018-05-02 10:38:50
オリジナル
1434 人が閲覧しました

今回は、webpack ソース コードでローダー メカニズムを使用するための手順をお届けします。webpack ソース コードでローダー メカニズムを使用する場合の 注意事項 は次のとおりです。実際のケースを見てみましょう。

ローダーの概念

ローダーは、さまざまな形式のリソースをロードして処理するために使用され、本質的にはファイルをパラメータとして受け取り、変換された構造を返す関数です。

loaderはモジュールのソースコードを変換するために使用されます。ローダーを使用すると、モジュールをインポートまたは「ロード」するときにファイルを前処理できます。したがって、ローダーは他のビルド ツールの「タスク」に似ており、フロントエンドのビルド ステップを処理する強力な方法を提供します。ローダーは、TypeScript などのさまざまな言語から JavaScript にファイルを変換したり、インライン画像をデータ URL に変換したりできます。ローダーを使用すると、CSS ファイルを JavaScript モジュールに直接インポートすることもできます。

ローダーとプラグインの違い

プラグインの仕組みは前回の記事で紹介しましたが、今日の学習の対象であるローダーは、合わせてwebpackの機能を大幅に拡張します。それらの違いは、ローダーはモジュールのソース コードを変換するために使用されるのに対し、プラグインの目的はローダーが達成できない他のことを解決することであるという点です。なぜそこまで言うのでしょうか? プラグインはどの段階でも呼び出すことができるため、ローダー全体でローダーの出力をさらに処理したり、ビルド実行中にイベントをトリガーしたり、事前に登録されたコールバックを実行したり、コンパイル オブジェクトを使用したりすることができます。いくつかの低レベルのもの。

ローダーの使用法

構成

module: {
  rules: [
   {
    test: /\.css$/,
    use: [
     { loader: 'style-loader' },
     {
      loader: 'css-loader'
     }
    ]
   }
  ]
 }
ログイン後にコピー

インライン

import Styles from 'style-loader!css-loader?modules!./styles.css';
ログイン後にコピー
CLI

webpack --module-bind 'css=style-loader!css-loader'
ログイン後にコピー

上記の3つの使用法は、連鎖した一連のローダーを右から左の順序で実行することであることを説明します。チェーンは次のローダーに値を返します。まず css-loader を使用して @import および url() パスで指定された CSS コンテンツを解析し、次に style-loader を使用して元の CSS コードをページ内の style タグに挿入します。

ローダーの実装

//将css插入到head标签内部
module.exports = function (source) {
  let script = (`
   let style = document.createElement("style");
   style.innerText = ${JSON.stringify(source)};
   document.head.appendChild(style);
  `);
  return script;
}
//使用方式1
resolveLoader: {
  modules: [path.resolve('node_modules'), path.resolve(dirname, 'src', 'loaders')]
},
{
  test: /\.css$/,
  use: ['style-loader']
},
//使用方式2
//将自己写的loaders发布到npm仓库,然后添加到依赖,按照方式1中的配置方式使用即可
ログイン後にコピー
手順 上記は同期的に実行される単純なローダーの実装であり、style-loaderの機能を実現するのと同等です。

ローダーの原理

function iteratePitchingLoaders(options, loaderContext, callback) {
  var currentLoaderObject = loaderContext.loaders[loaderContext.loaderIndex];
  // load loader module
  loadLoader(currentLoaderObject, function(err) {
    var fn = currentLoaderObject.pitch;
    runSyncOrAsync(
      fn,
      loaderContext, [loaderContext.remainingRequest, loaderContext.previousRequest, currentLoaderObject.data = {}],
      function(err) {
        if(err) return callback(err);
        var args = Array.prototype.slice.call(arguments, 1);
        if(args.length > 0) {
          loaderContext.loaderIndex--;
          iterateNormalLoaders(options, loaderContext, args, callback);
        } else {
          iteratePitchingLoaders(options, loaderContext, callback);
        }
      }
    );
  });
}
ログイン後にコピー
説明 上記は、Webpack ソース コードでのローダー実行の主要な手順です。ローダーは再帰的に実行されます。実行プロセスは、express

ミドルウェア

の仕組み

参照ソース コードです。

webpack: " 4.4.1"

  1. webpack-cli: "2.0.13"

  2. この記事の事例を読んだ後は、この方法を習得したと思います。さらに興味深い情報については、注目してください。 PHP 中国語 Web サイトの他の関連記事へ!

  3. 推奨読書:

JS

js+cssを使用して動的なプログレスバーを実装し、ページ上で制御可能な速度でタイピング効果を実現する手順の分析

以上がWebpack ソース コードでローダー メカニズムを使用する手順の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート