Dart有一种标准的方式来外部化设置,比如Java属性



我正在寻找将设置外部化到服务器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

最新更新