【问题标题】:Dart has a standard way to externalize settings like Java properties?Dart 有一种标准方法来外部化 Java 属性等设置吗?
【发布时间】:2015-10-21 02:06:25
【问题描述】:

我正在寻找将服务器 Dart 应用程序中的设置外部化的正确方法。

在 Java 中,常见的方式是属性文件。 Dart 中是否存在类似的东西?

【问题讨论】:

    标签: dart


    【解决方案1】:

    您可以只使用 Dart 脚本进行设置。如果没有具体原因,使用不同的格式是没有意义的。 通过简单的导入,您可以以键入的方式使用它。

    【讨论】:

    • 外部配置文件的重点通常是让开发和生产环境可以使用不同的值。这不适用于您提出的解决方案。
    • 如果你不检查它,你就是这样。您也不会使用服务密码签入设置文件。这是没有编译步骤的脚本语言的优势。
    • 当您说“Dart 脚本”时,您是在说this 之类的东西吗?
    • @Suragch 是的,我就是这个意思。
    【解决方案2】:

    当实现Resource 类时,我将只使用与我的程序一起部署的 JSON 文件。

    【讨论】:

      【解决方案3】:

      您可以使用全局变量,例如:

      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 文件,也不需要解析它们。此外,这些属性是经过类型检查的。

      【讨论】:

      • 是的,这是一个很好的解决方案,但是您不能再次从外部文件加载配置。如果要更改生产 URL,则需要重新构建和重新部署。
      【解决方案4】:

      我喜欢将配置放在像 what Günter Zöchbauer was talking about 这样的 Dart 类中,但也可以选择使用 safe_config 包。这样,您可以在 yaml 文件中输入值。引用文档:

      您使用这些属性定义 Configuration 的子类:

      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"
      

      另请参阅 Aqueduct 中的 example。

      【讨论】:

        【解决方案5】:
        main() { 
          var env = const String.fromEnvironment("ENV", defaultValue: "local");
          print("Env === " + env);
        
        }
        

        在运行 Dart 应用程序时提供环境选项 发布服务 --port=9002 --define ENV=dev

        参考资料:

        http://blog.sethladd.com/2013/12/compile-time-dead-code-elimination-with.html https://github.com/dart-lang/sdk/issues/27998

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-04-24
          • 1970-01-01
          • 2011-03-09
          • 2019-10-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多