2017-02-27 3 views
3

パブビルドに関する特定のコードをスキップします。ビルド中のダーツチェック

例:

Log.print( '何か$ {StackTrace.current}')。

私は上記のコードが生産現場でJSに転送されていないことを希望します。

答えて

3

アサートだけにチェックモードで実行され、デフォルトで本番モードでpub buildによっては含まれません:それはプロダクションモードで作成しますので、

assert(() { 
    Log.print('something ${StackTrace.current}'); 
    return true; 
}) 

DartPad exampleは、それを印刷しません。

あなたはまたpub buildに(OSの環境変数と混同していない) "環境" を渡すと、コード

transformers: # or dev_transformers 
- $dart2js: 
    environment: { PROD: "true" } 
const prod = String.fromEnvironment('PROD') 
print('PROD: $prod'); 
// prints 'PROD: null' in Dartium 
// prints 'PROD: true' in Chrome 

でそれを読むことができますが好奇心のためにもhttps://stackoverflow.com/a/22524258/217408

+0

を参照してください:I場合Log.print関数全体をアサーション内に置くと、ツリーの振る舞いによって関数の呼び出しも削除されますか? – Jonathan

+1

はい。また、 'assert(...)'の外に置いて内部から呼び出すだけなら、削除する必要があります。どこからでも使用されていない場合は、 'assert(...)'のようなビルド出力にしないコードからも、ツリーシェイクがそれを削除する必要があります。 –

+2

[コンパイル時にdart2jsでデッドコードを削除する](http://blog.sethladd.com/2013/12/compile-time-dead-code-elimination-with.html)と[bool.fromEnvironment doc](https ://api.dartlang.org/stable/1.22.0/dart-core/bool/bool.fromEnvironment.html) –

関連する問題