1. はじめに最近、 このプラグインによって実装される関数は比較的単純です。
2. Webpackの構築プロセスとプラグインの原理2.1 Webpackのビルドプロセス
2.2 プラグインの原則
// プラグインクラスを定義する MyPlugin { // プラグイン設定オプションを受け取るコンストラクタ コンストラクタ(オプション) { // 設定項目を取得し、プラグインを初期化します} // プラグインがインストールされると、applyが呼び出され、コンパイラに渡されます 適用(コンパイラ) { // comolier への排他的アクセスを取得し、イベント フックをリッスンできます // 関数開発... } } 2.3 コンパイラとコンパイルオブジェクト
3. プラグイン開発3.1 プロジェクトディレクトリこのプラグインによって実装される機能は比較的単純であり、ファイル ディレクトリも複雑ではありません。まず、空のフォルダー // コンソール Webpack プラグインを削除する ├─ソース │ └─index.js ├─.gitignore ├─package.json └─README.md 3.2 プラグインコードプラグイン コードのロジックは複雑ではありませんが、いくつかの主要なポイントがあります。
クラス RemoveConsoleWebpackPlugin { // コンストラクタは設定パラメータを受け入れます。constructor(options) { include = options && options.include; とします。 let removed = ['log']; // デフォルトのクリア方法if (include) { Array.isArray(include) の場合 { console.error('options.include は配列でなければなりません。'); } そうでない場合 (include.includes('*')) { // * を渡すとすべてのコンソールがクリアされます removed = Object.keys(console).filter(fn => { 戻り値の型は console[fn] === 'function' です。 }) } それ以外 { removed = include; // 受信した設定に従って上書きします} } this.removed = 削除されました; } // Webpack はプラグインインスタンスの apply メソッドを呼び出し、コンパイラオブジェクトを渡します。apply(compiler) { // js リソースコード処理関数 let assetHandler = (assets, compilation) => { removedStr を this.removed.reduce((a, b) => (a + '|' + b)); とします。 reDict = { 1: [正規表現(`\\.console\\.(${removedStr})\\(\\)`, 'g'), ''], 2: [RegExp(`\\.console\\.(${removedStr})\\(`, 'g'), ';('], 3: [RegExp(`console\\.(${removedStr})\\(\\)`, 'g'), ''], 4: [RegExp(`console\\.(${removedStr})\\(`, 'g'), '('] } Object.entries(assets).forEach(([ファイル名, ソース]) => { // jsファイルに一致 if (/\.js$/.test(filename)) { // 処理前のファイルの内容 let outputContent = source.source(); Object.keys(reDict).forEach(i => { [re, s] = reDict[i]とします。 出力コンテンツ = outputContent.replace(re, s); }) compilation.assets[ファイル名] = { // ファイルコンテンツソースを返す: () => { 出力コンテンツを返す }, // ファイルサイズを返す size: () => { Buffer.byteLength(outputContent, 'utf8') を返します。 } } } }) } /** *compiler.hooks.compilation.tapを通じてイベントをリッスンする *コールバックメソッドでコンパイルオブジェクトを取得する */ コンパイラーフック.コンパイル.タップ('RemoveConsoleWebpackPlugin', コンパイル => { // ウェブパック5 コンパイルフックのプロセスアセットの場合 コンパイルフック.processAssets.tap( { 名前: 'RemoveConsoleWebpackPlugin' }, アセット => アセットハンドラー(アセット、コンパイル) ); } そうでない場合 (compilation.hooks.optimizeAssets) { // ウェブパック4 コンパイルフックの最適化アセットのタップ( 'RemoveConsoleWebpackPlugin', アセット => アセットハンドラー(アセット、コンパイル) ); } }) } } // プラグインをエクスポート module.exports = RemoveConsoleWebpackPlugin; 4. npmに公開する他の人にプラグインを使ってもらいたい場合は、 まず、 ログイン後、 公開する前に、ルート ディレクトリの
すべての準備ができたら、プラグインが配置されているディレクトリに切り替えて、 アップロードに成功したら、 5. 結論これで、80行のコードでWebpackプラグインを書いてnpmに公開する記事は終了です。Webpackプラグインをnpmに公開する方法の詳細については、123WORDPRESS.COMの過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも123WORDPRESS.COMをよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: Windows 10にOdoo12開発環境をインストールする方法
>>: Linux での NVIDIA GPU 使用状況の監視の詳細な説明
目次1. はじめに2. スケジューラの基本概念2.1. 実行キュー (rq) 2.2 スケジューリン...
目次リナックス1. SWAPとは2. swappiness は何を調節しますか? 3. スワップ操作...
CSS でテキストアイコンを実装する方法 /*アイコンスタイル*/ .nav-icon-norma...
まず、フォントアイコンとは何でしょうか?表面的にはアイコンですが、実際はテキストです。テキストの設定...
SQL では、GROUP BY は SELECT の結果のデータをグループ化するために使用されます。...
問題の背景:再生中のビデオのスクリーンショットを撮る必要があります。ビデオはビデオタグを使用して再生...
1. ストレージエンジン前のセクションでは、SQL 実行プランは、エグゼキュータ コンポーネントがス...
Web ページのスタイル設定に関しては、プロジェクトで純粋な CSS または SCSS (および他...
antd-mobileをインストールするグローバル輸入 npm をインストール antd-mobil...
1. 今日の午後、コースの要件により、Ubuntu で FTP サーバーを設定する実験を行う必要が...
dockerの登場により、多くのサービスが徐々にハードウェアアーキテクチャへの依存から脱却しました。...
原理としては、まずボタン付きの div を記述し、次に画面のサイズに応じて自動的に適応してキーボード...
Linux コマンドラインには、プロセスを強制終了するためのコマンドが多数用意されています。たとえば...
目次概要延長は必要ですか?スロットJavaScript ユーティリティ関数拡張コンポーネントの複数の...
docker create コマンドは、イメージに基づいてコンテナを作成できます。このコマンドの効果...