我正在寻找将设置外部化到服务器Dart应用程序中的正确方法。
在Java中,常见的方法是使用属性文件。达特有类似的东西吗?
您可以使用Dart脚本进行设置。如果没有具体原因,使用不同的格式没有意义。通过一个简单的导入,您可以以键入的方式使用它。
实现Resource
类时,我只需要使用与程序一起部署的JSON文件。
您可以使用全局变量,例如:
DB_URL = 'localhost:5432/mydb';
DB_PASS = 'my_pass';
然后可以为每个环境创建不同的配置文件。例如,对于生产,您可以创建一个production_config.dart,其中可能包含:
loadConfig() {
DB_URL = '123.123.123.123:5432/mydb';
DB_PASS = 'my_prod_pass';
}
然后在您的主函数中,如果环境是生产环境,您可以调用production_config.loadConfig
,例如:
import 'production_config.dart' as prodConfig;
main(List<String> args) {
var ENV = getEnvFromArgs(args);
if(ENV == 'PROD') {
prodConfig.loadConfig();
}
//do other stuff here
}
这样,如果你想从开发转变为生产,你只需要向你的dart程序传递一个参数,例如:
dart myprogram.dart -env=PROD
这种方法的优点是,您不需要为此创建单独的属性、json或yaml文件,也不需要解析它们。此外,这些特性是经过类型检验的。
我喜欢把配置放在Dart类中,就像Günter Zöchbauer所说的那样,但也可以选择使用safe_config包。通过此操作,您可以在yaml文件中输入值。引用文件:
您定义了具有以下属性的配置子类:
class ApplicationConfiguration extends Configuration { ApplicationConfiguration(String fileName) : super.fromFile(File(fileName)); int port; String serverHeader; }
您的YAML文件应该包含这两个区分大小写的密钥:
port: 8000 serverHeader: booyah/1
要读取您的配置文件:
var config = new ApplicationConfiguration("config.yaml"); print("${config.port}"); // -> 8000 print("${config.serverHeader}"); // -> "booyah/1"
另请参见"渡槽"中设置的示例。
main() {
var env = const String.fromEnvironment("ENV", defaultValue: "local");
print("Env === " + env);
}
在运行Dart应用程序时提供环境选项pub-server--port=9002--define ENV=dev
参考文献:
http://blog.sethladd.com/2013/12/compile-time-dead-code-elimination-with.htmlhttps://github.com/dart-lang/sdk/issues/27998