2017-02-27 8 views
3

Ich möchte einige bestimmte Code auf Pub Build überspringen.Dart überprüfen, ob Gebäude ist

Beispiel:

Log.print ('etwas $ {StackTrace.current}');

Ich möchte, dass der obige Code nicht in JS in der Produktion umgewandelt wurde.

Antwort

3

Asserts sind nur im aufgegebenen Modus ausgeführt und wird nicht durch pub build im Produktionsmodus standardmäßig enthalten sein:

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

DartPad example es nicht drucken, weil es im Produktionsmodus aufbaut.

Sie auch https://stackoverflow.com/a/22524258/217408

+0

Für Neugier "Umwelt" (nicht verwechseln mit OS Umgebungsvariablen) zu pub build und lesen Sie es in Code

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 

See passieren kann: Wenn ich Setzen Sie die gesamte Log.print-Funktion in eine Assert, die Aufrufe für die Funktion werden auch durch das Baumwackeln entfernt? – Jonathan

+1

Ja. Es sollte auch entfernt werden, wenn Sie es außerhalb von 'assert (...)' lassen und es nur von innen aufrufen. Wenn es nicht von irgendwoher verwendet wird, sollte Tree-Shaking es entfernen, auch wenn es aus Code verwendet wird, der es nicht in die Build-Ausgabe bringt, wie der in 'assert (...)'. –

+2

Siehe [Eliminierung von Eliminierung kompilierter Zeit mit dart2js] (http://blog.sethladd.com/2013/12/compile-time-dead-code-elimination-with.html) und [bool.fromEnvironment doc] (https : //api.dartlang.org/stable/1.22.0/dart-core/bool/bool.fromEnvironment.html) für weitere Informationen –