この投稿の主な目的は、Webpackプラグインの作成中にエラー/警告管理に関する追加情報を得ることです。Webpackプラグインエラー管理
私はプラグインインターフェイス(コールバックで)ベースのタイミングにerr
パラメータを渡すことが可能ですWebpack plug-in documentationで見てきたが、それはWebPACKのライフサイクルに影響を与えていますどのように何の更なる説明は、そのビルドはありませんプロセスとそれを使用する方法。他のタイプのプラグインインタフェースでエラーを管理する方法があるかどうかは説明していません。
は、とにかく最初の試みとして、'emit'
ライフサイクルの段階で、私はerr
パラメータにnew Error('An error has occurred')
または単に'An error has occured'
値を渡すのどちらかにしようとしたが、いずれの場合には、それは確かに与えられたERRパラメータを表示します(悲しいことに、エラーの特定の着色なしIE)があり、そしてWebPACKの-SEV-serverが捕まってしまったとしてコンソール:だから、それは余分なコールバックがWebPACKのビルドプロセスを持つために、以下の方法を呼び出す必要
function WpAggregationPlugin() {
this.startTime = Date.now();
this.prevTimestamps = {};
}
WpAggregationPlugin.prototype.apply = function(compiler) {
compiler.plugin('emit', (compilation, callback) => {
var changedFiles = Object.keys(compilation.fileTimestamps).filter(watchfile =>
this.prevTimestamps[watchfile] &&
(this.prevTimestamps[watchfile] < (compilation.fileTimestamps[watchfile] || Infinity)))
// compilation.errors.push(new Error('...'))
this.prevTimestamps = compilation.fileTimestamps;
if(changedFiles.length <= 0) {
callback()
} else {
process.stdout.write(`File modification detected :\n${JSON.stringify(changedFiles, null, 4)}\n`)
callback('...')
}
});
};
module.exports = WpAggregationPlugin;
が再開:
を...
if(changedFiles.length <= 0) {
callback()
} else {
process.stdout.write(`File modification detected :\n${JSON.stringify(changedFiles, null, 4)}\n`)
callback('...')
callback() // EXTRA CALL
}
...
残念ながら、この方法では、Webpackのライフサイクルに影響を与えることなく、無色の文字列をstdoutに表示するだけです。
私が達成しようとしているのは、エラーが発生したときにエラーメッセージが表示され、バンドルビルドプロセスがvalid
の状態になるのを防ぐためです。
警告管理について私は、プラグイン自体の中で直接着色してprocess.stdout.write()
を呼び出すか、コンパイルパラメータで警告収集を行うかのどちらかで実行する必要があると思います。これは唯一の推測です:p
私はアプリケーション内で散らばっているすべての翻訳を1つのファイルに集約することを目標とする小さなビルドツールを作成しているので、この質問をします。私たちのクライアントが数十台ではなく一つの翻訳ファイルを扱うようにするためです。
これは「ワンショット」モードまたは時計モードで実行できますが、Webpackビルドプロセスのプラグインとしてこれを直接統合するのが最もよいと思います。
ウェブパックの新人として、私はこの「建築的」選択肢についてあなたの見解を伝えてください。私は間違いなくその可能性を全面的に受け入れていないと思います。 (この記事の主な理由ではないので、もちろん注意してください)
おかげさまで、あなたのヒントやトリックをお寄せいただきありがとうございます;)!
私は最終的にこれをソートしました。実際のところ、 'compilation.errors.push(新しいエラー( 'ビルド理由失敗しました ')) 'もちろん、あなたのプラグインが失敗したかどうかに関わらず' callback() 'を忘れることはありません。この 'errors.push'は、バンドルがwebpack-dev-serverによって処理されないようにし、' http:// yourDN:yourPort 'のおかげでコマンドラインに赤色で表示されます。/webpac-dev-server'を実行すると、webpackヘッダー部分のクライアント側でこのエラーが報告されます。開発者にエラーを修正させてからさらにコーディングするようにしてください;) – Lemmy