我正在开发一个角度应用程序,建议将生成的代码用于生产中运行的很多东西,即模板缓存,表达式缓存和静态DI注入器。目前没有很好的方法在不同的构建配置之间切换,所以我使用的是推荐的模式here:
在lib / main.dart中,您可以看到正在导入的initializer-prod.dart文件,该文件具有initializer-dev.dart对应文件。在这两个文件之间切换将允许您在prod和dev模式之间切换。在使用prod模式之前,您需要运行生成器脚本。
这导致以下导入:
//import 'initializer_prod.dart' as init; // Use in prod/test.
import 'initializer_dev.dart' as init; // Use in dev.
如您所见,切换导入是一个手动过程。是否有更好,更自动的方法来实现这一目标?
答案 0 :(得分:2)
我看到两种可能性(我自己还没有尝试过这些)
或
log(String msg) {
if (const String.fromEnvironment('DEBUG') != null) {
print('debug: $msg');
}
}
main() {
log('In production, I do not exist');
}
有关变形金刚的一些链接:
修改强>
我能够在pubspec.yaml中配置dart2js
选项,如
transformers:
- $dart2js:
commandLineOptions: [-DDEBUG=true]
environment:
DEBUG: "true"
suppressWarnings: true
terse: true
如果提供了未知选项或者它不是预期的格式(pub build
用于commandLineOptions,yaml list
表单环境),它们将被验证并且yaml map
失败
但 String.fromEnvironment()
未获得值
根据此问题,支持: Passing in arguments to dart2js during pub build
我提交了一个错误How to pass options to dart2js from pubspec.yaml
修改-2 强>
我尝试过它现在正在运作:
transformers: # or dev_transformers
- $dart2js:
environment: { PROD: "true" }
从
等代码中访问它String.fromEnvironment()
main() {
print('PROD: ${const String.fromEnvironment('PROD')}');
// works in the browser
// prints 'PROD: null' in Dartium
// prints 'PROD: true' in Chrome
}
另见Configuring the Built-in dart2js Transformer
修改-3 强>
另一种方法是使用assert
来设置变量。
生产中会忽略assert
。