Babel
とWebpack
を使用して、ES5
からES6
コードを生成しています。コーディング中に行う間違いを減らすために使用される検証がいくつかあります。
class Logger {
/**
* @param {LogModel} info
* {LogTypes} type
* {String} message
* {Date} date
*/
static log(info) {
if(info instanceof LogModel)
throw new Error("not a instance of LogModel");
notify(info);
}
}
log
関数で、引数がLogModel
クラスのインスタンスであるかどうかを検証します。これは間違いを防ぐためだけです。 if条件が多すぎるとアプリケーションが遅くなるため、if条件が本番環境にあることは望ましくありません。 Babel
およびWebpack
を使用した検証なしで、検証付きの開発リリースと本番リリースを生成することは可能ですか?
assert パッケージを使用してコードを適用してから、 webpack-unassert-loader または webpack-strip-assert を使用してアサーションを削除できます。プロダクションコード。
var assert = require('assert').ok;
class Logger {
/**
* @param {LogModel} info
* {LogTypes} type
* {String} message
* {Date} date
*/
static log(info) {
assert(info instanceof LogModel, "Param must be an instance of LogModel");
notify(info);
}
}
他の答えは時代遅れのようです。 webpack 4では、webpack設定でmode: 'production'
を設定できます。
コードで、次のような開発モードを確認します。
if (process.env.NODE_ENV === 'development') {
if(info instanceof LogModel)
throw new Error("not a instance of LogModel");
}
Webpackがmode: 'production'
でバンドルを作成すると、これらのif句内のすべてのコードがif句自体とともに、バンドルから自動的に削除されます。
定義プラグインを明示的に使用する必要はありません(「内部」でWebpackによって使用されます)。また、他の回答で言及されているwebpack-unassert-loader
やwebpack-strip-block
のようなものを使用する必要もありません。
私がこれを試すために作ったこの小さなデモリポジトリをチェックしてください: https://github.com/pahund/webpack-devprod-experiment
よりクリーンなオプションは、webpackの define-plugin を使用することです。
設定ファイル内:
new webpack.DefinePlugin({ __DEV: JSON.stringify(true) })
app.js:
if(__DEV){ console.log("logged only in dev env") }
__DEV
の値は、コンパイル時にwebpackによって提供されます。
webpack-strip-block は良い解決策です。コンパイル時に本番コードのコードブロックを削除します。
/* develblock:start */
/* develblock:end */
assert
sに限定されず、prodに冗長なコードはありません。