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 使用状況の監視の詳細な説明
ウェブページに403 Forbiddenと表示されるNginx (yum インストール ログは通常 ...
1. セマンティゼーションとは何ですか? Bing辞書の説明セマンティクス化とは、適切な HTML ...
目次1. Node.jsとVue 2. ローカル開発環境でフロントエンドのVueプロジェクトを実行す...
目次1. BOMの紹介1. JavaScriptは3つの部分から構成される2.ウィンドウオブジェクト...
例えば: <link rel="スタイルシート" href="h...
序文MySQL データベースを使用する過程では、データベースのバックアップと復元が必要になることがよ...
非直交マージンマージンを使用するとマージが発生します次のプロパティはマージンの結合を防止します。国境...
序文Workbench が 1 台のコンピューターにインストールされており、別の Ubuntu サー...
この記事の例では、簡単な計算機を実装するための小さなプログラムの具体的なコードを参考までに共有してい...
ご存知のとおり、cd コマンドがないと、Linux でディレクトリを切り替えることはできません。それ...
CSS 位置position 属性は、要素の配置タイプを指定します。位置プロパティには 5 つの値が...
私のコンピューターのグラフィック カードは Nvidia グラフィック カードです。再起動後、画面に...
目次1. 問題2. 解決策オプション1:オプション2: 1. 問題この話は、エラーと脱落率を照会する...
序文みなさんこんにちは。CSS ウィザードの alphardex です。この記事では、three.j...
1. 問題Linux 上の mysql5.7 のパスワードを忘れました2. 解決策• ステップ 1:...