дротик проверить, строится ли

Я хотел бы пропустить определенный код при сборке паба.

пример:

Log.print('что-то ${StackTrace.current}');

Я хотел бы, чтобы приведенный выше код не был перенесен в JS в процессе производства.


person Jonathan    schedule 27.02.2017    source источник


Ответы (1)


Утверждения выполняются только в проверенном режиме и не будут включены pub build в производственный режим по умолчанию:

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

пример DartPad не распечатывается, поскольку он создается в производственном режиме.

Вы также можете передать «среду» (не путать с переменными среды ОС) в pub build и прочитать ее в коде.

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.

person Günter Zöchbauer    schedule 27.02.2017
comment
Для любопытства: если я помещу всю функцию Log.print в утверждение, вызовы функции также будут удалены при встряхивании дерева? - person Jonathan; 27.02.2017
comment
Да. Его также следует удалить, если вы оставляете его вне assert(...) и вызываете только изнутри. Если он нигде не используется, встряхивание дерева должно удалить его, а также если он используется из кода, который не попадает в выходные данные сборки, такие как код из assert(...). - person Günter Zöchbauer; 27.02.2017