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 使用状況の監視の詳細な説明
序文アプリケーションのバグや DBA の誤操作が発生した場合、テーブル全体が更新される可能性がありま...
1. Ansibleのプレイブックを使用してhttpdを自動的にインストールする1) まず、Ansi...
背景現在、会社のプロジェクトは、フロントエンドとバックエンドが分離された方法で開発されています。新し...
序文コードを実行してエラーが発生すると、エラーが出力されます。エラーにはスタック情報が含まれており、...
折りたたまれたヘッダーは、特別オファーや重要なお知らせなど、ユーザーにとって重要な情報を表示するのに...
知識ポイント1: ヘッダー情報にWebページのベースURLを設定するベース URL の本質は、ハイパ...
序文導入Lombok は、Google Guava と同様に便利なツールであり、強くお勧めします。す...
とあるサイトからレンタルした仮想マシンの有効期限が近づいており、更新料が200元以上かかります。Al...
目次序文スタイルローダーCSSローダーsassローダーpostcssローダーバベルローダーtsローダ...
1. フォームテキスト入力のモバイル選択: テキスト入力フィールドにプロンプトが追加されている場...
この記事では、参考までにVue More Filter Itemウィジェットの実装方法を例として紹介...
オペレーティング システム: Win7 64 ビット Ultimate Edition MySQL ...
1. mysql-8.0.15をダウンロード、インストール、設定する1. 公式サイト (https:...
RedisはRedisバージョン5のapline(Alps)イメージを使用します。これは小さくて高速...
HTML POST リクエストで a タグを使用する 2 つの例を次に示します。 1. ajaxを使...