Dart检查是否正在构建

3

我希望在发布构建时跳过一些特定的代码。

例如:

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

我希望上述代码在生产环境中不被转换为JS。

1个回答

3

断言只在检查模式下执行,并且默认情况下不会被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://dev59.com/k33aa4cB1Zd3GeqPiMwv#22524258


好奇一下:如果我将整个Log.print函数放在assert中,那么函数的调用也会被树摇除去吗? - Jonathan
1
是的。如果将其放在assert(...)之外并且只从内部调用它,那么它也应该被删除。如果它没有被任何地方使用,树摇应该会将其移除,即使它被用在不包括构建输出的代码中,例如在assert(...)内部的代码中。 - Günter Zöchbauer
2
请参阅 使用 dart2js 进行编译时死代码消除bool.fromEnvironment 文档 以获取更多信息。 - Alexandre Ardhuin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接