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 使用状況の監視の詳細な説明
CSS の 2D 変換を使用すると、移動、回転、拡大縮小、変形などの基本的な変換操作を 2 次元空間...
ご存知のとおり、コンピューターには 2 種類の画像があり、1 つはビットマップ、もう 1 つはベクタ...
1. 事業背景マスク レイヤーを使用してユーザーの異常な操作を遮断する方法は、フロントエンドでよく使...
1. インストールプロセスMySQL バージョン: 5.7.18 1. my.ini ファイル(簡易...
目次1. vue-cli デフォルト プロジェクトを作成する (babel のみを含む) 2. 作成...
SSHとは何か管理者はリモートでログインして、インターネット経由で接続されたさまざまな場所にある複数...
序文このブログ記事が公開された後、何人かの友人からSQL Serverバージョンがあるかどうか尋ねら...
目次01 InnoDBレプリカセットの紹介02 InnoDBレプリカセットの制限03 導入前に知って...
例えば:コードをコピーコードは次のとおりです。 <html> <ヘッド> &...
目次1. 要件の説明2. アイデアの概要1. 延長を要求する2. アイデアの概要3. SQLコード1...
1. /etc/passwdファイル内のデフォルトシェルが/sbin/nologinではないユーザー...
目次Django でのタイムゾーン設定USE_TZ=真USE_TZ=偽Linux コンテナでのタイム...
1 Tomcatをダウンロードして起動する公式サイト http://tomcat.apache.or...
次の背景画像を持つ div があるとします。 次の反射効果を作成します。 方法はたくさんありますが、...
1. 親コンテナーをテーブルに設定し、子をインライン要素に設定します。テキストを表示するサブコンテン...