【发布时间】:2015-10-21 02:06:25
【问题描述】:
我正在寻找将服务器 Dart 应用程序中的设置外部化的正确方法。
在 Java 中,常见的方式是属性文件。 Dart 中是否存在类似的东西?
【问题讨论】:
标签: dart
我正在寻找将服务器 Dart 应用程序中的设置外部化的正确方法。
在 Java 中,常见的方式是属性文件。 Dart 中是否存在类似的东西?
【问题讨论】:
标签: dart
您可以只使用 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 文件,也不需要解析它们。此外,这些属性是经过类型检查的。
【讨论】:
我喜欢将配置放在像 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。
【讨论】:
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
【讨论】: