如何在编译时将字符串常量自动设置为日期戳?
就像是:
const String COMPILE_DATESTAMP = eval_static(DateTime.now().toString());
...
String s = "This program was compiled $COMPILE_DATESTAMP";
其中 s 将代表例如“该程序已编译 1971-02-03 04:05:06”
如何在编译时将字符串常量自动设置为日期戳?
就像是:
const String COMPILE_DATESTAMP = eval_static(DateTime.now().toString());
...
String s = "This program was compiled $COMPILE_DATESTAMP";
其中 s 将代表例如“该程序已编译 1971-02-03 04:05:06”
感谢您的提问!
Dart 中没有必需的编译步骤。(我们确实有一个可选的 Dart-to-JavaScript 编译器,甚至还有一个进行树抖动的 Dart-to-Dart 处理器。) Dart 的 VM 接受文本文件形式的输入。与 Ruby 或 Python 类似,它运行基于文本的脚本。
正如其他人所提到的,这是某种构建步骤的工作。
我是 Dart 的新手,但我在文档中没有看到任何东西表明这样的事情是可能的。我强烈怀疑它不是。
如果你真的需要你描述的功能,我认为你最好的选择是推出你自己的构建脚本。像这样简单的东西:
#!/bin/bash
sed -ri "s/INSERT_DATETIME_HERE/`date`/" $1
dart2js $1 -o$1.js
可以根据您的需要进行修改。(如果是我,我会想要在那里进行一些健全性检查;我只是建议一个起点。)您的代码将变为:
const String COMPILE_DATESTAMP = "INSERT_DATETIME_HERE";
...
String s = "This program was compiled $COMPILE_DATESTAMP";
您必须编写另一个可以检查实际编译程序的dart程序。然后很简单:
File compiledApp = new File('path/to/compiled/app.dart');
compiledApp.lastModified().then(
(modifiedDate)
{
print("This program was compiled $modifiedDate");
},
onError: (exp)
{
// File doesn't exist ?
}
);
这个技巧建立在编译器将修改文件的“最后修改日期”的知识之上